Skip to main content
Glama

Server Details

Trade Solana from your Moby wallet with app-set caps and Guardrails. No withdrawals.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.9/5.0

Scored across 77 tools

Disambiguation4/5

Despite heavy surface overlap (five WhaleWatch feed variants, four token-holder tools, three portfolio/balance tools), each description draws explicit boundaries and cross-references the alternative, so an agent can usually tell which to call. A few boundaries remain shaky: get_whalewatch_lists vs get_whalewatch_wallet_lists, and get_token_holders vs get_token_holdings vs get_token_key_holders require close reading to separate.

Naming Consistency4/5

Names follow a predictable verb_noun snake_case pattern with strong prefixes (get_my_* for user data, get_token_*, get_whale_wallet_*, get_whalewatch_*), and the get_my_ convention is even documented as a disambiguation cue. Minor deviations exist: discover_wallets_to_follow breaks the verb_noun shape, and the whalewatch list/detail names are awkwardly similar.

Tool Count2/5

77 tools is far beyond a well-scoped set, and several clusters are near-duplicates rather than distinct operations (five WhaleWatch feeds, seven whale-wallet tools, five token-holder/quality tools, four balance/position tools). The domain is genuinely broad, so this is not a 1, but the surface has clearly over-proliferated.

Completeness4/5

Coverage is unusually deep: trading and exits, DCA, order lifecycle with history, portfolio and PnL, market data, whale research, strategies, watchlists, following and feedback all exist. Gaps are modest — watchlists are read-only, there is no fund deposit/withdraw or order-amend tool (only cancel and replace), and SOL TP/SL is unsupported.

Available Tools

77 tools
cancel_orderCancel an orderA
Destructive
Inspect

Cancel one resting order — or a whole DCA schedule — so it can no longer fire. Pass EXACTLY ONE of order_id (from get_my_orders) or schedule_id (from get_my_dca_schedules; stops every remaining slice, filled slices stay filled). This does not move funds, but it is not reversible — a cancelled stop-loss stops protecting the position, and re-placing it will be at whatever price is available then. Confirm with the user which order they mean when they have more than one. Cancels are never blocked by the user's order-type switches.

NameRequiredDescriptionDefault
order_idNo`order_id` from `get_my_orders`. Omit when cancelling a DCA by `schedule_id`.
schedule_idNo`schedule_id` from `get_my_dca_schedules` — cancels that whole DCA.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint/readOnlyHint annotations: it states no funds move, that the action is irreversible, the concrete consequence of cancelling a stop-loss (position left unprotected, re-entry at whatever price is available), and that order-type switches do not block cancellation. These are exactly the side-effect details an agent needs before an irreversible call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five tight sentences, front-loaded with what the tool does and the selection rule, then escalating to irreversibility and confirmation guidance. No redundant restatement of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Mutation tool covered by annotations and a dedicated output schema, and the description still supplies the gap-filling context: side effects, reversibility, parameter exclusivity, and user-confirmation etiquette.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, but the description adds real meaning: the exactly-one constraint, the provenance of each ID, and the schedule semantics ('stops every remaining slice, filled slices stay filled') which the schema does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (cancel) and two concrete resources (a resting order or a whole DCA schedule), plus the effect — 'so it can no longer fire'. This is clearly separable from siblings like create_order or get_my_orders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit mutual-exclusion rule ('Pass EXACTLY ONE of `order_id` or `schedule_id`'), routes the agent to the source tools (`get_my_orders`, `get_my_dca_schedules`), and adds a disambiguation instruction to confirm with the user when multiple orders exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_orderPlace a trigger orderA
Destructive
Inspect

Place a resting order that executes later when its condition is met: a limit order, take-profit, stop-loss, trigger buy, or a DCA schedule. ⚠️ THIS SPENDS REAL MONEY. It submits a real transaction from the user's wallet using real funds and cannot be undone. Confirm the exact amount, token and network with the user in plain language, and get their explicit go-ahead, BEFORE calling this. It commits the user's funds to a trade that can fire while they are not looking. Read back the full order — type, token, amount, every price — and get an explicit yes before calling.

Trade limits: a SELL order (TP, SL, limit or DCA sell into the USD stable) never counts toward or is blocked by maxTradeUsd / dailyVolumeUsd. A BUY order is checked against both and reserves its USD value in the daily volume when placed; if it is cancelled, expires or fails, the unfilled part is given back.

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_leg_error why — the other leg is LIVE and stays; place only the missing one with sl_only / tp_only, never the bracket again.

  • To protect a position on BOTH sides use sl_and_tp, or tp_only and sl_only as two calls (back to back is fine). Cancelling one leg does NOT cancel the other. When one FILLS and that sells the whole position, Moby cancels your remaining exits on that token within a minute or two (a full quick_sell cancels them in the same call); after a PARTIAL exit the other stays live. get_my_orders (status="terminal") then shows it with cancel_reason.

  • dca_buy / dca_sell — split the trade into order_count equal slices interval_seconds apart. Needs both, and NO price argument. All prices are USD prices of the token. amount is always what the user SPENDS: the funding asset on a buy, the token itself on a sell. Refusals that are NOT argument problems: no_market (no sell route for a new token yet — wait and retry the same call later) and stop_above_market / tp_below_market (price already past the trigger — re-check the price and pick a new trigger). Deciding to retry or re-place is your job; Moby does not retry or re-arm for you. To CLOSE or trim a position at market now, use quick_sell — not an order here. EXITS ARE YOURS: Moby attaches no automatic TP/SL to your buys. Place a position's take-profit / stop-loss here (sl_and_tp, or tp_only / sl_only) after the buy. SOL positions: use quick_sell; TP/SL on SOL is not supported yet.

NameRequiredDescriptionDefault
amountYesHow much to SPEND, in whole token units: the funding asset on a buy, the held token on a sell.
networkNosolana
rationaleNoOptional. 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.
order_typeYesWhich kind of order to place. See the tool description for what each one needs.
limit_priceNoUSD limit price. Required for `limit_buy` and `limit_sell`.
order_countNoHow many DCA slices to split the amount into. Required for `dca_buy` and `dca_sell`.
token_addressYesContract address of the token the order is about.
stop_loss_priceNoUSD 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.
interval_secondsNoSeconds between DCA slices. Required for `dca_buy` and `dca_sell`.
take_profit_priceNoUSD price at which to take profit. Required for `tp_only` and `sl_and_tp`.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as destructive, open-world, and non-idempotent, but the description adds critical context: it spends real money, submits a real wallet transaction, cannot be undone, and requires explicit user confirmation. It also discloses trade-limit behavior, buy-vs-sell volume accounting, bracket leg behavior, cancellation interactions, refusal reasons, and that Moby does not retry or re-arm orders.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but appropriately sized for a destructive tool with eight order types and complex bracket/DCA behavior. The safety warning is front-loaded, and the order-type rules are organized as a scannable list with no obvious filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich annotations, 90% schema coverage, and an output schema, the description fills the remaining behavioral gaps: confirmation requirements, trade limits, bracket leg results, partial-exit cancellation behavior, refusal handling, and SOL limitations. An agent has enough information to invoke this tool correctly and safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is high, but the description adds substantial conditional meaning beyond the schema: order_type determines which price arguments are required, amount means the funding asset on buys and the held token on sells, trigger_buy uses stop_loss_price, and DCA orders require order_count and interval_seconds with no price argument. It also clarifies that all prices are USD prices of the token.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: place a resting order that executes later when a condition is met. It enumerates the exact order types and distinguishes this tool from quick_sell for immediate market closes, so an agent can tell it apart from siblings without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use this tool versus alternatives: use quick_sell to close or trim at market now, and place TP/SL here after a buy because Moby attaches no automatic exits. It also explains which order_type to choose for each trading intent and how to handle bracket failures.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discover_wallets_to_followSuggested wallets to followA
Read-only
Inspect

The Find-Wallets suggested pool: PUBLIC wallets ranked for discovery, is_following marked per row. With query set, searches by name/brand or an exact pasted address (followed wallets ARE included). With no query, returns a ranked pool that EXCLUDES wallets the caller already follows — use get_my_followed_wallets to see those. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
limitNoWallets to return, 1-50. Keep it small.
queryNoA KOL name, whale-list brand, or exact pasted address. Omit to browse.
networkNosolana
wallet_typeNoall

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/destructive/openWorld, so the bar is lower; the description still adds real behavior beyond them — the include/exclude asymmetry for followed wallets depending on `query`, and the scope caveat that this is whole-market data, not the user's own holdings. Missing only operational traits like ranking criteria or result staleness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core definition and the query/no-query split before the disambiguation tail. The `get_my_` prefix rule takes two sentences to state one idea, which is mild redundancy but still informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return shape need not be explained, and the description covers scope, filtering semantics, and sibling routing. The remaining gap is the undocumented `wallet_type` filter, which an agent would have to guess at.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 50% schema coverage the description must compensate, and it does for `query` (name/brand or exact pasted address, followed wallets included) — meaningful value beyond the schema text. However `wallet_type` (all/kol/trader/whale) and the fixed `network` const receive no explanation anywhere, leaving one filter opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Find-Wallets suggested pool: PUBLIC wallets ranked for discovery') and immediately names what each row carries (`is_following`). It explicitly separates itself from `get_my_followed_wallets` and the `get_my_` family, so an agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit branches: with `query` it searches by name/brand or exact pasted address and includes followed wallets; with no `query` it returns a ranked pool excluding already-followed wallets, and points to `get_my_followed_wallets` for those. The when-not (this is not user-specific data) is also stated outright.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_swapExecute a swapA
Destructive
Inspect

Execute a swap that get_swap_quote already priced. ⚠️ THIS SPENDS REAL MONEY. It submits a real transaction from the user's wallet using real funds and cannot be undone. Confirm the exact amount, token and network with the user in plain language, and get their explicit go-ahead, BEFORE calling this. Only ever pass a quote_id returned by get_swap_quote in this same conversation, after showing the user that quote's numbers and receiving an unambiguous yes. Never call this to 'check' anything. If it answers that the quote expired, get a fresh quote — never re-send the old quote_id.

AMOUNTS: read the _ui fields (whole tokens) when talking to the user — the un-suffixed output_amount / minimum_output_amount / filled_*_amount are in the token's SMALLEST unit. A null amount is unknown, never zero: fill_pending: true means the trade was submitted but its fill is not booked yet — say so, and read the received amount from get_swap_status rather than guessing it.

NameRequiredDescriptionDefault
quote_idYes`quote_id` from a recent `get_swap_quote` response.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive + non-idempotent, but the description adds material context beyond them: real funds, irreversibility, only the user could authorize, quote-expiry failure mode, and the `fill_pending: true` state meaning the fill is not yet booked. That last detail is behavioral knowledge an agent could not infer from schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose sentence comes first, the money warning is immediately second and visually marked, and the AMOUNTS paragraph is separated by a label. Length is justified for a destructive financial action; no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, yet the description still adds the critical unit caveat (`_ui` = whole tokens vs smallest-unit raw fields) and the null-vs-zero distinction with a pointer to `get_swap_status`. Nothing an agent needs to call or read the result correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With one parameter at 100% schema coverage the baseline is 3; the description earns above that by tightening the constraint to a `quote_id` returned by `get_swap_quote` in this same conversation, ruling out stale or cross-session IDs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource and draws a hard line against `get_swap_quote`, clarifying that this one spends funds while the sibling only prices. It does not, however, distinguish itself from `quick_buy`/`quick_sell`, which are also fund-spending execution tools an agent could plausibly reach for instead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit preconditions (quote_id from `get_swap_quote` in the same conversation, user confirmation of amount/token/network in plain language), an explicit prohibition ("Never call this to 'check' anything"), and the recovery path when a quote expires. Few definitions route an agent this completely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

follow_walletFollow a walletA
Idempotent
Inspect

Follow a PUBLIC whale/KOL/trader wallet, so its trades appear in get_my_following_feed. Idempotent — following an already-followed wallet is a no-op and does not count against the follow cap (max_follows on get_my_followed_wallets). Moves no money and needs no agentic wallet. Fails if the caller is already at the cap.

NameRequiredDescriptionDefault
networkNosolana
custom_nameNoOptional nickname for this wallet, max 50 characters.
wallet_addressYesPublic wallet ref from a Find-wallets or WhaleWatch tool.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotency and non-destructiveness, and the description adds concrete behavioral context: following an already-followed wallet is a no-op and does not count against `max_follows`, no money moves, no agentic wallet is needed, and the call fails at the cap. These are exactly the side-effect and auth details an agent needs before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the action and effect, followed by the key caveats. No filler or repeated information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. The description supplies the remaining operational context needed to invoke correctly: public-only targeting, idempotency caveat, follow-cap behavior, and no agentic wallet requirement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents `wallet_address` as a public wallet ref and `custom_name` with its 50-character limit. The description reinforces that the target must be public but does not explain `network` or `custom_name` behavior, so it adds only marginal meaning over the 67%-covered schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb, 'Follow', and resource, 'PUBLIC whale/KOL/trader wallet', and names the downstream effect in `get_my_following_feed`. This clearly distinguishes it from siblings like `unfollow_wallet`, `discover_wallets_to_follow`, and `get_my_followed_wallets`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the use case (followed wallet's trades appear in the following feed), constrains the target to PUBLIC wallets, and notes that it fails at the follow cap. It does not explicitly direct the agent to `discover_wallets_to_follow` for finding candidates, so alternative guidance is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_degen_leaderboardDegen leaderboardA
Read-only
Inspect

The high-risk ('degen') leaderboard: newer, smaller, far more volatile tokens than get_screener_leaderboard. Tokens here can lose most of their value in minutes and many are short-lived. Say that plainly when you present them. Ranked best-first; page 1 is the top. Moby's leaderboards: Main = get_screener_leaderboard (composite 24h activity, 'what's moving'); Degen = get_degen_leaderboard (newer, smaller, higher risk); Majors = get_group_leaderboard(group_id="home_majors"); Stocks = get_group_leaderboard(group_id="home_stocks") (tokenized stocks); Pulse = get_group_leaderboard(group_id="home_pulse"). The Solana group ids majors_solana / stocks_solana work too, and the home_* ids are listed under home_tabs in get_screener_groups. The Majors and Stocks boards are THE reference for major and tokenized-stock contract addresses: take token_address from the row. Never resolve a major or a stock by ticker search alone, and never keep your own mint list. Results are capped. Raise limit or step page only if the answer is genuinely not in the first page — a large result costs context that later steps of the same task need. 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. asset_class: tokenized_stock marks tokenized equities (treat as stock proxies, not memecoins). safety_tier: green = verified; grey = usually fine (not scored yet or a young launchpad token, NOT a red flag — do not skip a coin for being grey); red = caution / DYOR, the only tier to treat as a warning (Moby refuses agent buys on red). This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
pageNo1-based page number. Page 1 is the top.
limitNoTokens per page, 1-100. Keep it small.
networkNosolana
whale_windowsNoWindows for the optional per-row `whale` block, e.g. ["h1", "h4"]. Omit for the default row.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly/openWorld; the description adds materially more: volatility and short-lived-token risk, best-first ranking with page 1 as top, a results cap with context-cost rationale, and precise semantics for the whale block (buyers-plus-sellers vs buyers-only) and safety_tier colors (grey is not a red flag; Moby refuses agent buys on red). This is exactly the context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical differentiator and the risk warning are front-loaded, and each paragraph covers a distinct concern (identity, routing map, pagination discipline, whale block, asset class, safety tier). It is dense and long, but nearly every sentence earns its place; the Solana group-id addendum is the only slightly expendable part.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers everything needed to call this correctly despite an output schema already existing: risk framing, ordering, pagination limits, optional whale block semantics, asset_class handling, safety_tier interpretation, and an explicit note that this is market-wide data not user wallet data (distinguishing it from the get_my_* siblings).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and the schema already documents page/limit, but the description supplies the meaning the schema omits: guidance to keep limit small, the cost tradeoff of paging, and — critically — what `whale_windows` produces per row (whale_count, buyers vs sellers, net flow, and the correspondence with `whale_count_h24`), which the schema never explains.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the exact resource ('the high-risk degen leaderboard') and immediately contrasts it with `get_screener_leaderboard` as newer, smaller, more volatile tokens. An agent can distinguish it from every sibling leaderboard tool without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit routing map across all five leaderboards (Main/Degen/Majors/Stocks/Pulse) with the exact group ids, plus concrete when-to-use rules ('raise limit or step page only if the answer is genuinely not in the first page'). Also warns never to resolve majors/stocks by ticker search, which prevents a common misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_group_leaderboardCategory leaderboardA
Read-only
Inspect

The ranked tokens inside one group/category. group_id must come from get_screener_groups — a group's group_id, or a home_tabs tab_id such as home_majors / home_stocks — do not invent or guess one. Ranked best-first; page 1 is the top. Moby's leaderboards: Main = get_screener_leaderboard (composite 24h activity, 'what's moving'); Degen = get_degen_leaderboard (newer, smaller, higher risk); Majors = get_group_leaderboard(group_id="home_majors"); Stocks = get_group_leaderboard(group_id="home_stocks") (tokenized stocks); Pulse = get_group_leaderboard(group_id="home_pulse"). The Solana group ids majors_solana / stocks_solana work too, and the home_* ids are listed under home_tabs in get_screener_groups. The Majors and Stocks boards are THE reference for major and tokenized-stock contract addresses: take token_address from the row. Never resolve a major or a stock by ticker search alone, and never keep your own mint list. Results are capped. Raise limit or step page only if the answer is genuinely not in the first page — a large result costs context that later steps of the same task need. 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. asset_class: tokenized_stock marks tokenized equities (treat as stock proxies, not memecoins). safety_tier: green = verified; grey = usually fine (not scored yet or a young launchpad token, NOT a red flag — do not skip a coin for being grey); red = caution / DYOR, the only tier to treat as a warning (Moby refuses agent buys on red). This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
pageNo1-based page number. Page 1 is the top.
limitNoTokens per page, 1-100. Keep it small.
networkNosolana
group_idYes
whale_windowsNoWindows for the optional per-row `whale` block, e.g. ["h1", "h4"]. Omit for the default row.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, non-destructive), and the description layers on non-obvious behavior: results are capped, large results consume context needed later, null figures mean unknown, safety_tier grey is NOT a red flag while red is the only warning tier, and Moby refuses agent buys on red. It also disambiguates public market data from get_my_* wallet tools, which prevents a real class of misuse.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and routing, and most sentences earn their place. It is dense, though, and the per-field whale block explanation partially duplicates what the output schema already defines, so a little length could be trimmed without losing routing value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read tool with a rich output schema, this covers everything an agent needs to call it correctly: id provenance, ordering, pagination cost, tier interpretation, and scope (market data vs. user data). No ambiguity remains about what the call will return or how to interpret edge values like grey tier and nulls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 60% and group_id has no schema description at all, but the description fully compensates: it names the source tool, gives literal example ids (home_majors, home_stocks, home_pulse, majors_solana), and forbids guessing. For whale_windows it adds the meaning of each returned whale field and clarifies whale_count is buyers-plus-sellers, not buyers alone — semantics the schema does not carry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource: ranked tokens inside one group/category, best-first. It then explicitly separates itself from the closest siblings (get_screener_leaderboard, get_degen_leaderboard) and names the concrete group_ids that select the Majors/Stocks/Pulse variants, so an agent can route correctly without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use routing across five boards, plus a hard precondition (group_id must come from get_screener_groups, never invented) and a negative instruction (never resolve a major or stock by ticker search, never keep your own mint list). It also states when not to paginate — only if the answer is genuinely not on page 1 — which is exactly the kind of usage guidance agents need.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_kol_top_heldTracked KOLs holding a tokenA
Read-only
Inspect

Tracked KOLs — named public traders/influencers — holding this token. The KOL-only slice of get_token_key_holders. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana
token_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, so safety is covered. The description adds value the annotations cannot: that the result is whole-market public data rather than user-scoped data, which prevents a class of misinterpretation. It does not mention result limits, pagination, or whether an empty list means 'no tracked KOLs' versus 'untracked token', so it is not fully complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the core definition front-loaded, followed by the sibling relationship and the data-scope caveat. The final get_my_ sentence is slightly tutorial-ish but earns its place as a broad disambiguation rule across a large sibling set. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-shape explanation is correctly omitted, and annotations cover the safety profile. For a two-parameter read-only lookup, the description supplies everything needed to decide to call it and interpret the result as market-wide rather than personal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, and it barely does. 'This token' only obliquely implies the required token_address parameter, giving no format or network expectations, and the network parameter (const 'solana') is never mentioned at all. An agent learns nothing beyond the name of the concept being queried.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Tracked KOLs holding this token') and immediately defines the ambiguous term KOL as 'named public traders/influencers'. It also positions itself against siblings by calling itself 'the KOL-only slice of get_token_key_holders', so an agent can distinguish it from get_token_key_holders, get_whale_holders, and get_top_held without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear selection rule via the negative case: it is 'NOT about the user's own wallet or holdings', and get_my_* tools are the ones for personal data. That is a real disambiguation across a sibling list full of get_my_* tools. It stops short of explicit when-to-use framing such as 'use this when you need KOL conviction vs. all holders', leaving the choice against get_token_key_holders partly inferential.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_launchpadsLaunchpad activityA
Read-only
Inspect

Tokens grouped by the launchpad they were created on (pump.fun and similar). Useful for 'what launched recently' questions. Newly launched tokens are the riskiest category on the platform. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, so the safety profile is covered by structured data. The description adds value by scoping the data as public market-wide rather than user-specific and by flagging that newly launched tokens are the riskiest category — a genuine caveat for downstream reasoning. It says nothing about result volume, ordering, or freshness, which the annotations do not cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the tool returns, then the routing exclusion. The sentence about newly launched tokens being the riskiest category is slightly tangential and could be trimmed, but it does carry decision-relevant risk context rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return shape needn't be described; the only parameter is a constant. Given that, the description covers everything an agent needs — what the data is, when to reach for it, and the critical distinction from the many `get_my_*` siblings in this toolset.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single `network` parameter is a const 'solana' with a default, so the schema fully constrains it even at 0% description coverage; there is no ambiguity for the description to resolve. The description adds nothing about the parameter, but there is nothing meaningful to add, landing at the expected baseline for a near-parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names the resource and the grouping axis precisely ('tokens grouped by the launchpad they were created on') and gives a concrete example (pump.fun), which is more specific than a generic 'get launchpads'. It stops short of naming a functional sibling (e.g. search_tokens, get_token_live_feed) that returns similar data under a different lens, so differentiation is present but indirect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives a use case ('what launched recently' questions) and an explicit exclusion: it is not about the user's own wallet, and `get_my_` tools are the ones for user data. This is a real routing rule, though it points at a naming convention rather than naming a specific competing tool for market-wide token discovery.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_moversMarket eventsA
Read-only
Inspect

Screener events — discrete things that happened to tokens (price and volume moves, notable activity) over a period, newest first. This is the event stream behind the leaderboards, so use it when the user asks what CHANGED or what HAPPENED rather than what ranks highest right now. Poll for new events with after_timestamp; page back through history with before_timestamp. Each event carries flat 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) — those are AS OF NOW (read time), while market_cap_usd and price_usd are AT THE TIME OF THE EVENT. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
pageNo1-based page number.
limitNoEvents per page, 1-100. Keep it small.
periodNoTime window. `all` or omitted disables the filter.
networkNosolana
event_typesNoRestrict to these event types. Omit for all types.
token_addressNoRestrict to one token's events. Omit for the whole market.
after_timestampNoOnly events after this instant. ISO 8601 UTC, e.g. `2026-08-11T14:30:00Z`.
before_timestampNoOnly events before this instant. ISO 8601 UTC, e.g. `2026-08-11T14:30:00Z`.
market_cap_groupNoMarket-cap band. `all` or omitted disables the filter.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, non-destructive, open-world, non-idempotent), so the description focuses on what annotations cannot express: newest-first ordering, the polling/paging idiom, and the crucial split between fields that are AS OF NOW (liquidity, smart-money flow) versus AT EVENT TIME (market cap, price). It does not cover rate limits or freshness lag for polling, which keeps it off a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core definition and the change-vs-rank distinction, then field semantics, then the wallet-scope disclaimer. Dense and mostly waste-free, though the closing two sentences about `get_my_` tools are somewhat belabored for a point already implied by the prefix convention.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter, zero-required read tool with an output schema, the description covers everything an agent needs: what an event is, ordering, temporal field semantics, pagination strategy, and the scope boundary versus personal-data tools. Return shape is delegated to the output schema, as allowed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 89%, so the baseline is 3; the description still adds real semantic value by explaining how `after_timestamp` and `before_timestamp` are meant to be used (polling vs. back-paging) rather than just what they filter. It also clarifies the scope implied by `token_address` filtering ('omit for the whole market') implicitly through its whole-market framing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: a screener event stream of discrete token events (price/volume moves, notable activity) over a period, newest first. It explicitly contrasts itself with the leaderboards ('the event stream behind the leaderboards') and with `get_my_` tools, so an agent can place it against `get_screener_leaderboard` and `get_screener_event_filters` without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit selection rule — use it when the user asks what CHANGED or HAPPENED rather than what ranks highest now — which directly routes between this and the leaderboard siblings. It also names two concrete usage modes with their parameters: poll forward with `after_timestamp`, page back with `before_timestamp`.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_active_strategiesMy running strategiesA
Read-only
Inspect

The strategies the user's agents are running, 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. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault
include_stoppedNoTrue also returns stopped strategies.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/non-destructive, but the description adds substantial context beyond them: data is server-persisted so all clients see it, scope is resolved from the caller's API key with no cross-user access, `app_links` are user-facing deep links, and it explains how `active` vs `paused` vs stopped should be treated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the identity and returned field list, then usage rules. It is dense and nearly every sentence earns its place, though the field enumeration partly duplicates the output schema and adds length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema existing, the description covers scope, timing, status handling, and the meaning of `app_links`, leaving nothing an agent would need to call it correctly. Complete for a read-only, single-optional-param tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single `include_stopped` boolean is already documented in the schema. The description restates the same behavior ('pass include_stopped=true for stopped ones too') without adding new meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('the strategies the user's agents are running') and scopes it tightly to the current user's own persisted data. It does not explicitly name or contrast with the sibling `list_strategies` or `get_strategy`, which is the one thing keeping it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit timing ('at the start of every session' and 'before starting a strategy') plus the reason (prevent duplicate runs across sessions) and behavioral rules (resume `active` on its `schedule`, leave `paused` alone unless asked). This is when-to-use guidance with concrete operating instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_activityMy wallet activityA
Read-only
Inspect

The user's own wallet activity feed — their trades, transfers, deposits and withdrawals, newest first. ⚠️ This one is CURSOR-paginated, not page-numbered: read cursor out of the response and pass it back to get the next page. Do not send a page number. 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. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault
limitNoItems per page. Keep it small.
cursorNoOpaque cursor from the previous response. Omit for the first page.
networkNosolana
categoryNoRestrict 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 'this token was received', and every swap receives something, so the question has no answer across a whole-wallet feed.
token_addressNoRestrict to activity involving one token. Omit for all.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare read-only/non-destructive; the description adds the operationally critical traits: cursor-based pagination with an explicit warning not to send a page number, and identity resolution from the API key. These are exactly the behaviors that cause failed calls when undisclosed, and they are stated up front.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then pagination warning, then sibling routing, then scope — a sensible priority order. Slightly longer than necessary; the '⚠️' framing and repeated pagination point cost a little density, but every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations, a full output schema, and high schema coverage, the description covers the remaining gaps: ordering, pagination protocol, identity scope, and sibling routing. Only minor omissions remain, such as no hint about expected page sizes or whether the feed mixes categories by default.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80% and the schema already documents `cursor`, `limit`, and the `category`/`token_address` dependency (including the buys/sells/closed_trades rejection rule). The description reinforces cursor semantics but adds no parameter detail beyond the schema; the most valuable conditional logic lives in the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ('wallet activity feed') and enumerates the contents (trades, transfers, deposits, withdrawals) plus ordering ('newest first'). It explicitly distinguishes itself from the sibling `get_my_transactions` and scopes to the current user, so an agent can tell the two history tools apart without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit decision rule: prefer activity for 'what have I been doing', use transactions when a specific type such as deposits is needed, with the structural reason (merged human-readable timeline vs. raw filterable list). It also states a hard exclusion — there is no way to query someone else's wallet with this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_balancesMy balancesA
Read-only
Inspect

The user's CURRENT holdings in their Solana agent wallet, with balances and USD values. USDC is your cash (flagged is_cash: true). SOL and every other token are positions; sell with quick_sell to raise USDC. What each part contains:

  • tokens — EVERYTHING held in the wallet, and the authoritative answer to 'what do I own'. It INCLUDES the native coin (SOL, flagged is_native: true) and the USD funding asset (USDC, flagged is_quote: true) whenever their balance is above zero; every other row has both flags false. An empty tokens means the wallet really is empty.

  • native_token / usd_token — the same native-coin and funding-asset balances again, as fixed slots that are present even at zero. Use them for the affordability check; never add them to the tokens total, they are already in it.

  • Native SOL is read from the CHAIN at call time: balance_source: "chain". If that read failed it is Moby's stored snapshot instead (balance_source: "ledger") — say the SOL figure may be stale. ledger_disagrees: true only means the stored snapshot was wrong; the quantity shown is the chain's.

  • swap_user_tokens — the swap LEDGER: cost basis and PnL per position. Its quantities are NOT the amounts held; where it disagrees with tokens, tokens is right. HOW MUCH THE USER HOLDS comes from the CHAIN and is reported by get_my_balances, get_my_token_balance and get_my_position (balance_source: "chain"). WHAT IT COST — cost basis, average entry, realised PnL, trade history — comes from Moby's swap ledger, which only sees swaps Moby executed. Never quote a ledger quantity as the amount held: on live accounts it runs several times high AND several times low against the chain, and a sell sized from it fails on-chain. IMPORTANT: get_my_closed_positions returns ONLY positions the user has already exited. Positions the user still holds come from get_my_balances. Never tell a user they hold nothing based on get_my_closed_positions being empty. asset_class: tokenized_stock marks tokenized equities (treat as stock proxies, not memecoins). ⚠ ONE WALLET. For the agent's equity as a single total, call get_my_portfolio instead; this tool is the right one for the per-token detail and for the affordability check before a trade.

Balances other than native SOL come from a cached snapshot that lags a deposit made outside Moby. If the user says they just funded the wallet and the balance does not show it, call this ONCE more with refresh=true before telling them anything is wrong — their money is on chain either way. Do not pass refresh routinely: it is much slower.

USDC split (ENG-1803): available_usdc is the USDC spendable NOW — size buys from it. reserved_usdc is USDC already committed to the user's resting DCAs and limit / trigger buy orders; it comes back only by cancelling them (cancel_order). reserved_breakdown lists each one (kind dca|order, schedule_id / order_id, token, reserved_usd, remaining_slices, next_order_at); in_wallet: true means that USDC still sits in the wallet balance until the order pulls it, so do not spend it twice. This is NOT the daily-volume daily_volume_reserved_usd in get_my_guardrails — that is spend-cap accounting over a rolling 24h. All three are null when Moby could not read the orders: then check get_my_orders before spending. app_links.deposit is where the user adds funds; app_links.settings is their limits. app_links are Moby app deep links to hand to the user; they open the Moby app on their phone. interview_due: true (the first read each hour also carries onboarding_hint) means the user was never onboarded: go back to onboarding FIRST — get_my_trading_profile, the capabilities brief, the 6-question interview or skip — before you act on these numbers. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault
networkNosolana
refreshNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover safety/read semantics; the description adds far more — cache staleness on non-native balances, chain vs ledger `balance_source` and what `ledger_disagrees` actually means, the ledger-vs-chain quantity trap that can make a sell fail on-chain, and null USDC fields when orders are unreadable. None of this contradicts the annotations (readOnly=true, destructive=false are consistent with a self-scoped read).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Roughly 700 words for a two-parameter read tool, with the core answer buried under repetition — chain-vs-ledger authority is stated twice, and the closed-positions warning is re-emphasized in capitals. Bullets help structure, but a large share of sentences could be cut without losing decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema, the description maps every response section (`tokens`, `native_token`/`usd_token`, `swap_user_tokens`, `available_usdc`/`reserved_usdc`/`reserved_breakdown`, `app_links`, `interview_due`) and warns against the double-count and double-spend errors. An agent has everything needed to call it and interpret the result correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load; it explains `refresh` thoroughly, including cost (much slower) and the precise trigger for using it. The `network` parameter is never mentioned, though as a const `solana` with a default it carries no decision for the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+scope: the CURRENT USER's holdings in their Solana agent wallet with balances and USD values. It explicitly differentiates from siblings — `get_my_portfolio` for equity totals, `get_my_token_balance`/`get_my_position` for single positions, `get_my_closed_positions` for exited positions — so an agent can route without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use and when-not-to-use: use for per-token detail and the affordability check, use `get_my_portfolio` for a single equity total, check `get_my_orders` when the USDC fields are null. It also spells out the refresh condition (call once more with `refresh=true` only after an off-Moby deposit doesn't show, never routinely because it is much slower).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_closed_positionsMy closed positionsA
Read-only
Inspect

🔴 CLOSED POSITIONS ONLY — positions the user has already fully exited, with their realised profit and loss. IMPORTANT: get_my_closed_positions returns ONLY positions the user has already exited. Positions the user still holds come from get_my_balances. Never tell a user they hold nothing based on get_my_closed_positions being empty. Use this for realised PnL questions. An empty result means the user has never closed a position, and says nothing at all 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'. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault
pageNo1-based page number.
limitNoPositions per page, 1-100. Keep it small.
networkNosolana
token_addressNoRestrict to closed positions in one token. Omit for all.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly/non-destructive/openWorld; the description adds genuinely non-obvious behaviour — data is scoped to the calling user's API key with no way to query another wallet, results are position-level rollups rather than fills, and an empty response means 'never closed a position' rather than 'holds nothing'. These are semantic traits the annotations could never convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core distinction and the highest-risk warning, so skimming yields the right behaviour. It does repeat the 'closed only' point twice (the IMPORTANT sentence and the empty-result sentence), costing some length for a four-parameter read tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape needn't be described; the remaining gaps an agent could hit — user scoping, empty-result interpretation, and the position-vs-trade granularity — are all covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% (page, limit, and token_address are documented in the schema), so the baseline applies. The description adds nothing about the `token_address` filter, which is the one parameter whose usefulness ('how did I do on X') is implied but never spelled out, and says nothing about paging behaviour.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource and scope: closed positions the user has fully exited, with realised PnL. It explicitly separates itself from `get_my_balances` (open positions) and `get_my_closed_trades` (individual fills), so an agent can pick the right tool without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit decision rule: positions for 'how did I do on X', trades for 'show me every trade'. It also states a when-not ('never tell a user they hold nothing based on an empty result') and names the alternative that answers holdings questions, which is precisely the failure mode for this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_closed_tradesMy closed tradesA
Read-only
Inspect

The user's completed trades, newest first — one entry per closed buy→sell cycle, with what was bought or sold and the realised result. Each cycle carries fills: every buy/sell leg with timestamp, side, price_usd, token_amount, usd_amount and tx_hash (pass include_fills=false to skip them), plus the rationale you gave for it (null when none). 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'. IMPORTANT: get_my_closed_positions returns ONLY positions the user has already exited. Positions the user still holds come from get_my_balances. Never tell a user they hold nothing based on get_my_closed_positions being empty. ⚠️ ONE TOKEN AT A TIME: token_address is REQUIRED. The backing service formats a per-token history and has no cross-token mode. For the user's whole trading history across tokens, call get_my_closed_positions instead. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault
pageNo
limitNo
networkNosolana
include_fillsNo
token_addressYesContract address of the ONE token to show trades for. Required.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a read-only, non-destructive operation, and the description adds substantial behavioral context: data is scoped to the current API-key user, token_address is required with no cross-token mode, and include_fills=false skips fill legs. It also explains that rationale is null when absent and that empty closed positions do not imply no holdings.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key scope and sibling distinction are front-loaded and most sentences carry useful operational guidance. It is somewhat long and has a slight tension between 'one entry per closed buy→sell cycle' and later 'one entry per fill', which could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For this read-only history tool, the description covers scope, user isolation, required token constraint, sibling alternatives, fill inclusion behavior, and important empty-result caveats. With an output schema present, return-value detail need not be repeated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20%, so the description must carry semantics; it does so well for the required token_address and for include_fills. It does not explain page, limit, or network beyond the schema titles/defaults, so it is strong but not fully compensatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific retrieval purpose: the current user's completed trades, newest first, with the cycle/fill structure and realised result. It explicitly distinguishes this tool from get_my_closed_positions by contrasting trade-level vs position-level history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit usage guidance: use positions for 'how did I do on X' and trades for 'show me every trade', and use get_my_balances for still-held positions. It also states the required one-token-at-a-time constraint and that asking about another wallet is impossible.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_dca_schedulesMy DCA schedulesA
Read-only
Inspect

The user's DCA schedules — recurring buys or sells that split an amount into slices over time — with progress so far (how many slices have filled and when the next one is due). The same rows get_my_orders returns as dca_schedules; use this one when you only need the DCAs. get_my_orders answers 'what do I have running' in ONE call: orders (limit, take-profit, stop-loss) plus dca_schedules (DCA schedules, one row per schedule; a DCA's individual slices never appear in orders). get_my_dca_schedules is the same DCA rows on their own. If dca_schedules is null, the DCA read failed (dca_schedules_error): call get_my_dca_schedules before telling the user they have no DCA running. By default only live schedules are returned; set include_terminal to also see finished and cancelled ones. To stop a whole DCA, pass its schedule_id to cancel_order. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault
networkNosolana
include_terminalNoTrue also returns completed and cancelled schedules. Default: live only.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the read-only nature implied by annotations, the description clarifies operational behavior by stating the default scope (live schedules only) and how to override it using `include_terminal`. It also asserts data privacy boundaries regarding the 'CURRENT USER's own data.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

While dense, the structure is highly logical, starting with a definition, moving to differentiation, and ending with operational rules and scope constraints. Every piece of information serves a critical function in guiding tool selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity and the necessity of distinguishing this tool from related siblings, the definition is highly complete. It covers functionality, scope, error handling, and usage context thoroughly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds semantic meaning to the `include_terminal` parameter by explaining that setting it returns 'finished and cancelled schedules,' adding necessary context beyond the schema's simple type definition. It also clarifies the scope of the `network` parameter contextually.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description provides an explicit definition of DCA schedules (recurring buys/sells with slices and progress) and strongly differentiates the tool from the sibling `get_my_orders`, specifying it is for DCA rows alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit usage guidelines, instructing agents to use this tool when `get_my_orders` is insufficient, and offers a crucial workflow tip regarding the `dca_schedules_error` case, requiring a call to this tool before concluding there are no DCA schedules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_feedbackMy feedback to MobyA
Read-only
Inspect

Your earlier submissions and their status; 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. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault
limitNoHow many to return (1-50).
statusNoOnly submissions in this status.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and destructiveHint=false annotations, the description discloses that data is scoped to the current API-key user, newest-first ordering, the status values, and the presence of a team reply when available. It does not cover pagination behavior or limits in detail, but the annotations already carry the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, then adds scope and usage details without unnecessary repetition. Every sentence contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only two-parameter list tool with an output schema and full annotation coverage, the description is complete enough: it explains the returned fields, ordering, user scoping, status values, and the inability to query other users. No critical agent-facing information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both the limit and status parameters are already well documented in the schema. The description adds context around status values and ordering but does not add parameter-level meaning beyond what the schema provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the current user's earlier feedback submissions and their statuses, including fields and ordering. It also distinguishes this from querying another user's data, which sharpens the scope against sibling tools like submit_feedback.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives useful usage context: mention a shipped item to the user when relevant, and it explicitly notes that this only returns the current user's own data with no way to query someone else's wallet. It does not explicitly name submit_feedback as the alternative for adding new feedback, but the context is otherwise clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_followed_walletsMy followed walletsA
Read-only
Inspect

Every wallet the CALLER follows, with max_follows so you can report 'N of 50' without a second call, each row's current list associations, and any nickname set with follow_wallet. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=true), so the description's job is additive context, and it delivers: the response includes max_follows so 'N of 50' can be reported without a second call, includes list associations and nicknames, and is scoped strictly to the API key's owner. It does not discuss ordering or whether follows are paginated, which is the remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the return payload before the access-scope caveat. The 'N of 50' example earns its place by telling the agent why max_follows matters rather than just listing it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and there are no parameters, so the description only needs to cover scope and the notable return fields — both are done, including the unusual max_follows field and the per-row associations. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so there is nothing to mis-specify and the baseline is 4. The description correctly describes max_follows as a returned field rather than an input, avoiding the confusion of implying a filter exists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — every wallet the CALLER follows — plus the extra payload each row carries (max_follows, list associations, nicknames). The clause 'This returns the CURRENT USER's own data, resolved from their API key' cleanly separates it from get_whale_wallet_* and search_whalewatch_wallets, which query other people's wallets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear when this tool applies (you want your own follow list) and rules out querying someone else's follows. However, it never names the adjacent alternatives an agent would realistically weigh — get_my_following_feed for activity from followed wallets, get_my_wallets for wallet holdings, or follow_wallet/unfollow_wallet for mutation — so routing is left to inference from names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_following_feedMy following feedA
Read-only
Inspect

Trades made by wallets the CALLER follows, newest first. ⚠️ EMPTY MEANS 'you follow nobody, or nobody you follow has traded recently' — NOT 'no whale activity anywhere'; for the market-wide feed use get_whalewatch_feed. Filters mirror that tool minus list selection, since following is orthogonal to lists. Results are capped. Raise limit or step page only if the answer is genuinely not in the first page — a large result costs context that later steps of the same task need. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault
pageNo1-based page number.
limitNoTrades per page, 1-100. Keep it small.
networkNosolana
token_addressNoRestrict to trades in one token. Omit for every token.
wallet_addressesNoRestrict to specific FOLLOWED wallets. Omit for all followed wallets.
transaction_typesNo`buy` and/or `sell`. Omit for both.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare read-only/open-world safety; the description adds caller-scoped resolution from the API key, the hard constraint that other wallets cannot be queried, results being capped, and the cost of large pages. These are behavioral facts the annotations do not carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core definition, then the critical empty-result warning, then pagination and scoping caveats — a sensible priority order. It is dense rather than padded, though the 'filters mirror that tool' sentence is slightly meta and could be tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape needn't be described; the description instead covers the things that actually cause mistakes — empty-result misinterpretation, caller-only scope, and pagination cost. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 83% and already documents each filter, so the schema does most of the work. The description still adds value by framing the filter set relative to the whalewatch feed ('minus list selection, since following is orthogonal to lists') and by advising against large `limit`/deep `page` values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and scope: 'Trades made by wallets the CALLER follows, newest first.' It explicitly contrasts with the sibling `get_whalewatch_feed` (market-wide), so an agent can pick between them without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-not: empty means 'you follow nobody or nobody you follow traded recently,' not 'no whale activity anywhere,' and names the alternative `get_whalewatch_feed` for market-wide data. It also bounds when to raise `limit`/`page` ('only if the answer is genuinely not in the first page').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_guardrailsMy trading guardrailsA
Read-only
Inspect

The limits the user set on you in the Moby app, READ-ONLY — you cannot change them; only the user can, in the app. Read this before planning trades instead of discovering limits by refusal.

  • maxTradeUsd / dailyVolumeUsd: per-trade and rolling-24h trading-volume limits (null = uncapped). maxTradeUsd caps BUYS only — any sell passes it, whatever the size or output. Buys (and any other swap) count when placed or filled; sells into the USD stable (USDC) never count or get blocked — swaps and TP/SL/limit sell orders alike; cancelled buy orders give their reservation back. dailyVolumeUsedUsd = dailyVolumeExecutedUsd (traded) + dailyVolumeReservedUsd (unfilled buy orders still resting); the room left is dailyVolumeUsd - dailyVolumeUsedUsd.

  • defaults_applied: a list of limit names, e.g. ["maxTradeUsd", "dailyVolumeUsd"], that are Moby's defaults because the user has not saved their own (empty [] when every limit is the user's). Enforced all the same; call them Moby's default limits, never limits the user set.

  • minCapUsd / maxCapUsd: market-cap band for BUYS (null = no bound).

  • orderTypes: which kinds you may place (market covers swaps, quick_buy and quick_sell). Cancels are never blocked.

  • paused: true = every trade is refused until the user resumes you.

  • platform_limits: Moby's own trade-rate limits for this key.

  • app_links.settings is where the user changes these limits; app_links.deposit is where they add funds. app_links are Moby app deep links to hand to the user; they open the Moby app on their phone. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and destructiveHint=false, so the description's added value is the enforcement semantics: maxTradeUsd caps buys only, sells into USDC never count, cancelled buys release reservations, and paused blocks everything. It also discloses that data is resolved from the caller's API key with no way to query another wallet, and mentions platform rate limits. Minor gap: it doesn't say what a refusal/error response looks like, though that likely lives in the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the imperative and the READ-ONLY constraint, and the bulleted field breakdown is scannable. However, it is very long for a zero-argument getter, and much of the field-by-field explanation overlaps with the output schema that already exists — several clauses (e.g. the trailing restatement that this returns the current user's data) could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter, read-only tool with an output schema, the description covers everything an agent needs: what the fields mean operationally, how the daily volume math works, when trades get refused, and where the user must go to change limits. Nothing required for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so the baseline is 4. The description spends its words on return-field semantics instead, which is a reasonable use of the space but is not parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the resource precisely — the trading limits the user set on the agent in the Moby app — and immediately marks it READ-ONLY. No sibling tool returns guardrails, and the description makes the scope unambiguous in the first clause.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent to read this before planning trades 'instead of discovering limits by refusal,' which is a concrete when-to-use trigger. It also explains that only the user can change the limits and that app_links.settings is where they do it, so the agent knows the correct escalation path rather than attempting a write.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_ordersMy orders and order historyA
Read-only
Inspect

The user's single orders — limit orders, take-profit and stop-loss. By default only LIVE ones (not executed yet): use that before placing a new order (to avoid duplicates) and to find an order_id for cancel_order. For HISTORY — what filled, what was cancelled and why — pass status="terminal" (optionally with since/until). Filled rows carry filled_price, fill_tx_hash and slippage_vs_trigger_pct (signed, vs the trigger that fired); cancelled rows carry cancelled_at and cancel_reason (sibling_filled = Moby closed out this exit after the other one sold the position; position_closed, user, expired, failed, unknown). History is paged: limit (default 50, max 200) newest-first rows per page; step page only if the answer is not on the first one. Pass token_address to see only one token's orders (matches the token being sold or bought); without it every order on the wallet comes back.

Reading a row: input_* is what the user SPENDS (the funding asset on a buy — USDC), token_* is the SUBJECT token the order is about, and every price is quoted against the subject token. Describe an order by token_symbol, never by input_token_symbol. ⚠️ If a row carries data_warning, it contradicts itself — report its state as unclear rather than choosing one of the readings. origin: agent is an order you placed; origin: agent_auto_exit is an older exit Moby attached before automatic exits were retired — it is still that position's exit while it rests. DCAs: dca_schedules lists the DCA schedules in the same call (live ones by default; finished ones too when status asks for history), filtered by token_address like the orders. Each row's schedule_id is what cancel_order takes to stop the whole DCA; report progress from filled_order_count / order_count.

get_my_orders answers 'what do I have running' in ONE call: orders (limit, take-profit, stop-loss) plus dca_schedules (DCA schedules, one row per schedule; a DCA's individual slices never appear in orders). get_my_dca_schedules is the same DCA rows on their own. If dca_schedules is null, the DCA read failed (dca_schedules_error): call get_my_dca_schedules before telling the user they have no DCA running. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault
pageNoHistory only: 1-based page number.
limitNoHistory only: rows per page, newest first (max 200).
sinceNoISO 8601 time, e.g. `2026-10-23T00:00:00Z`. Only orders whose last state change (fill, else cancel/update) is at or after this.
untilNoISO 8601 upper bound, same clock as `since`.
statusNoOmit 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 order is `active` — there is no `open` and no `pending`.
networkNosolana
token_addressNoContract address: only orders on this token, whether it is the token being sold (TP/SL) or bought (limit buy). Omit for every token.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/destructive annotations, it discloses critical behavioral facts: this resolves the current user's data from their API key with no way to query another wallet, that a null dca_schedules means the read failed rather than no DCAs, and the data_warning self-contradiction rule. It also explains the origin field lifecycle and what each output field carries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded, opening with the core scope before expanding into history, row-reading, and DCA details. However, it is dense and somewhat repetitive toward the end (restating the DCA/orders relationship twice), which slightly exceeds what's needed given the schema already covers the params.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-param tool with an output schema and rich annotations, the description covers scope, history mode, fallback behavior, literal field interpretations, and multi-tool interactions. Nothing an agent needs to call it correctly or interpret results is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 86%, so the schema already documents most params. The description adds real meaning: status='terminal' = full history, page stepping only when the answer isn't on page one, and token_address matching either the sold or bought token. It mostly reinforces rather than extending the schema, so a 4 rather than a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource ('The user's single orders — limit orders, take-profit and stop-loss') and immediately qualifies the default scope ('only LIVE ones, not executed yet'). It explicitly differentiates from siblings like get_my_dca_schedules and clarifies the boundary that a DCA's slices never appear here.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use conditions: 'use that before placing a new order (to avoid duplicates) and to find an order_id for cancel_order.' It also gives the history trigger ('pass status=terminal') and a fallback instruction to call get_my_dca_schedules when dca_schedules is null. No sibling ambiguity remains.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_portfolioMy whole portfolioA
Read-only
Inspect

EVERYTHING the user's agent holds, in one call — with a single combined total of the AGENT'S OWN wallets only: the user's Copy Trading wallet and manual wallets are NOT counted. excluded_wallets lists what was left out (shortened address, owner_kind, label) and scope is agent_wallets; do not add those back in — hero_usd is the agent's equity, the number to judge its performance and drawdown by. Start here for 'how am I doing', 'what do I own', 'what is my agent worth'.

summary.hero_usd is the one number to quote; summary.wallets breaks it down per wallet; holdings.items is every position; trading_balances.items is the funding-asset balances. USDC is your cash; SOL and every other token are positions — sell with quick_sell to raise USDC. Do NOT add up summary.wallets yourself — hero_usd already is that sum, computed over the same rows.

⚠ NOT get_my_balances. That tool is ONE wallet's per-token detail; use it when you need to check affordability before a trade.

refresh=true re-reads every wallet from the chain and is much slower — a vendor round trip PER WALLET. Send it only when the user explicitly asks for fresh numbers, or right after a deposit they made outside Moby that is not showing. Never routinely. asset_class: tokenized_stock marks tokenized equities (treat as stock proxies, not memecoins). interview_due: true (the first read each hour also carries onboarding_hint) means the user was never onboarded: go back to onboarding FIRST — get_my_trading_profile, the capabilities brief, the 6-question interview or skip — before you act on these numbers. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault
refreshNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true and destructiveHint=false, but the description adds critical behavioral context beyond them: the scope excludes non-agent wallets, excluded_wallets explains omissions, refresh=true is much slower because it performs a vendor round trip per wallet, and the tool only returns the current user's own data. These details materially affect correct invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with scope and purpose, then usage guidance, then parameter behavior. It is longer than typical but mostly justified by the tool's scope and refresh complexity, though some repeated emphasis on not double-counting wallets could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema, the description does not need to document every return field, yet it still explains the key return structure: summary.hero_usd, summary.wallets, holdings.items, trading_balances.items, excluded_wallets, and scope. It also covers onboarding gating and freshness behavior, leaving no material gap for correct use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden for the single refresh parameter. It explains exactly what refresh=true does, how costly it is, and when it should and should not be used, which is more than enough to compensate for the missing schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: returns everything the user's agent holds in one call, with a combined total over the agent's own wallets only. It explicitly excludes Copy Trading and manual wallets and distinguishes itself from get_my_balances, so an agent can identify its role without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance: start here for 'how am I doing', 'what do I own', and 'what is my agent worth'. It also names the alternative get_my_balances and the condition for using it instead, warns when refresh=true is appropriate, and says to go back to onboarding first when interview_due is true.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_positionMy position in a tokenA
Read-only
Inspect

The user's position in ONE token: how much they hold, what they paid, and their unrealised profit or loss. Use this for 'am I up on X'. Amounts are in token units and USD; profit figures are USD.

HOW MUCH THE USER HOLDS comes from the CHAIN and is reported by get_my_balances, get_my_token_balance and get_my_position (balance_source: "chain"). WHAT IT COST — cost basis, average entry, realised PnL, trade history — comes from Moby's swap ledger, which only sees swaps Moby executed. Never quote a ledger quantity as the amount held: on live accounts it runs several times high AND several times low against the chain, and a sell sized from it fails on-chain.

Reading the numbers — they are NOT all measured over the same quantity, and the response names which is which:

  • balance_token_amount / balance_usd — what the user holds ON CHAIN right now, and what all of it is worth. This is the answer to 'how much do I have'.

  • cost_basis_usd / current_pnl_usd / current_pnl_pct — UNREALISED, measured over basis_known_token_amount only: the part of the holding Moby has a cost for. If that is smaller than balance_token_amount, the rest arrived by transfer or airdrop and has no known basis — say so rather than implying the PnL covers everything.

  • invested_usd / sold_usd — LIFETIME totals ever spent and ever received, including tokens long since sold. A DIFFERENT denominator from cost_basis_usd, which covers only the tokens still held. balance_usd + sold_usd - invested_usd is net LIFETIME cash flow and will NOT equal current_pnl_usd — both are correct at their own scope, so never present one as a check on the other.

  • realized_total_usd — realised PnL to date, including partial sells on a position still open (realized_open_cycle_usd) as well as completed round trips (realized_closed_cycles_usd). closed_trades_count counts only the completed round trips, so it is legitimately 0 while realised PnL is non-zero.

  • ledger_present: false means Moby has NO swap history for this token (it arrived by transfer or airdrop), so EVERY money field above is unknown rather than zero, whatever number it carries, and ledger_balance_token_amount is null.

A null profit field means UNKNOWN — no cost information — never zero and never break-even.

take_profit_orders_count / stop_loss_set INCLUDE the TP/SL legs you placed with create_order; get_my_orders lists them.

closed_cycles — the last 5 fully closed buy→sell cycles on this token, newest first (when, avg entry/exit, size, PnL); closed_cycles_count is the total. Tx hashes and per-fill legs: get_my_closed_trades(token_address). rationale is the thesis you gave on the open cycle's latest buy, null when none. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault
networkNosolana
token_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the read-only/idempotent annotations by explaining that the result is always the API key's own data, that there is no way to query another wallet, how null money fields mean unknown rather than zero, and what ledger_present: false implies. It also warns that lifetime invested/sold totals use a different denominator from current cost basis, which prevents a common analytical error.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and well organized with bullets, and much of the detail is genuinely useful for avoiding misinterpretation. However, the description is extremely long for a two-parameter read tool, and it duplicates a lot of return-field semantics that an output schema can carry, so it is dense rather than concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of mixing chain balances with a swap ledger, the description covers the critical edge cases: unknown versus zero, scope differences between PnL measures, ledger-present false, TP/SL inclusion, and closed-cycle history. With an output schema present, it does not need to explain return formatting, and it leaves no major behavioral gap for calling the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for parameter meaning, but it does not explain token_address or the network field. The phrase 'ONE token' and the incidental token_address in the get_my_closed_trades reference give a hint, but there is no description of required format or what network does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and scope: the current user's position in exactly one token, including holdings, cost, and unrealised PnL, with the example query 'am I up on X'. It explicitly separates itself from sibling tools like get_my_balances and get_my_token_balance, so an agent can choose it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit usage guidance ('Use this for am I up on X') and names the alternatives for the underlying data: chain balances from get_my_balances/get_my_token_balance, and per-fill legs from get_my_closed_trades. It also states a strong when-not-to: never quote a ledger quantity as the amount held, because ledger and chain amounts diverge.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_token_balanceMy balance of one tokenA
Read-only
Inspect

How much of ONE token the user holds right now, and what it is worth. The cheapest way to answer 'do I have any X', and the tool to size a sell from before placing one.

⭐ balance_token_amount IS THE ANSWER. It is the on-chain balance and it always agrees with get_my_balances. HOW MUCH THE USER HOLDS comes from the CHAIN and is reported by get_my_balances, get_my_token_balance and get_my_position (balance_source: "chain"). WHAT IT COST — cost basis, average entry, realised PnL, trade history — comes from Moby's swap ledger, which only sees swaps Moby executed. Never quote a ledger quantity as the amount held: on live accounts it runs several times high AND several times low against the chain, and a sell sized from it fails on-chain.

ledger_balance_token_amount and cost_basis_usd are the ledger's, included for cost context only. Check ledger_present BEFORE either: false means there is no ledger row at all and both are null/unknown — do NOT read ledger_disagrees: false as 'the sources agree', because it is also false when there is nothing to compare. When ledger_present is true and ledger_disagrees is true they are simply different numbers about different things — normal for any token that moved without a Moby swap, not an error, and not worth reporting to the user. Never average them, and never sell the larger one.

A balance of 0 is a real answer: the user does not hold this token. Use get_my_balances when you need everything they hold, and get_my_position when you also need unrealised PnL. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault
networkNosolana
token_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a read-only, non-destructive operation, but the description adds critical context beyond them: the data is the current user's own and cannot target another wallet, a balance of 0 is a real answer, and chain balance is distinct from Moby's ledger data. It also warns about `ledger_present`, `ledger_disagrees`, and the danger of sizing a sell from ledger quantities.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The answer is front-loaded in the first sentence, and the warnings are grouped into clear paragraphs. It is fairly long and occasionally repeats the same warning in different words, but the repetition is defensible given the costly failure mode it is trying to prevent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose, alternatives, data provenance, and key caveats, while an output schema exists to explain return fields. For a two-parameter read-only balance tool, the only notable omission is parameter-level detail, which is handled separately in the parameter semantics score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden of explaining `token_address` and `network`. It implies that a single token is queried and that results are scoped to the current user, but it never mentions the required `token_address` parameter, its expected address format, or the fixed `network: solana` constraint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific resource and scope: how much of ONE token the user holds right now and its worth. It distinguishes itself from `get_my_balances` (all holdings) and `get_my_position` (unrealised PnL), so an agent can tell when this tool is the right one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly names the use cases: cheapest way to answer 'do I have any X' and sizing a sell before placing one. It also names alternatives and when to use them: `get_my_balances` for everything held, `get_my_position` when unrealised PnL is needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_trading_profileMy trading profileA
Read-only
Inspect

The user's saved trading profile: experience, assets, work mode, sizing and protection (v1 rows read as v2). 🔴 Call this BEFORE ANY OTHER TOOL on every connect — before balances, portfolio, strategies or research.

  • interview_due: true = onboard first: 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.

  • 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 = never asked; saved = answers on file, use them; skipped = the user declined, do not ask again unless interview_due is true.

  • The profile is the user's INTENT. get_my_guardrails and the Moby app caps are the enforcement and the profile can never raise them. guardrail_conflicts lists where the user's wish exceeds a cap; tell them Moby enforces the cap. The wallet is never a parameter. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, non-destructive), and the description adds substantive behavior the annotations cannot: the v1-to-v2 read mapping, the meaning of interview_due/status states, guardrail_conflicts semantics, and the important disclosure that the scan schedule is never persisted to Moby and must be recreated agent-side each session.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the highest-priority instruction and the connect-time requirement, then organized as scannable bullets tied to specific response fields. It is long and embeds an entire onboarding workflow script, which is more than a tool description strictly needs, but nearly every line carries operational meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be restated, yet the description still annotates the semantically tricky fields (interview_due, status, recommended_strategies, guardrail_conflicts). For a zero-param read tool plus a multi-step onboarding flow, an agent has everything needed to call it and act on the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero input parameters the baseline is 4, and the description adds real value by explaining why: 'The wallet is never a parameter. This returns the CURRENT USER's own data, resolved from their API key' and that querying another wallet is impossible. That closes a common misuse path, though there is no parameter surface to describe.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource plus the exact payload returned (experience, assets, work mode, sizing, protection) and even notes v1 rows are normalized to v2. It also draws an explicit boundary against get_my_guardrails by explaining that the profile is intent while guardrails are enforcement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an unconditional when rule ('call this BEFORE ANY OTHER TOOL on every connect — before balances, portfolio, strategies or research') and enumerates the branch conditions for each `status` value, including the explicit exclusion 'skipped = ... do not ask again unless interview_due is true'. Alternatives and hand-offs (get_my_guardrails, list_strategies, save_trading_profile) are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_transactionOne of my transactions in fullA
Read-only
Inspect

One transaction in full detail, by its id. Get the id from get_my_transactions first — this tool does not search or list. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault
transaction_idYesTransaction id from get_my_transactions.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare a safe read (readOnlyHint=true, destructiveHint=false), and the description adds genuinely non-structured context: the record is scoped to the CURRENT USER resolved from their API key, so cross-wallet access is impossible. It does not describe failure behavior for an unknown or foreign transaction id, leaving a small gap for an idempotent=false read.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core purpose, then the prerequisite, then the access-scope constraint. Every sentence carries distinct information; nothing is redundant with the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read with full schema coverage, annotations, and an output schema, the description covers purpose, id provenance, list-vs-detail routing, and user scoping. No return-value explanation is needed because the output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is documented, so the schema does the heavy lifting (baseline 3). The description adds value the schema cannot: the provenance of `transaction_id`, telling the agent to obtain it from `get_my_transactions` rather than construct or guess it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('One transaction in full detail, by its id') with explicit singular-by-id scope. It is clearly separable from the sibling `get_my_transactions`, whose name is invoked as the source of ids. An agent can distinguish detail-fetch from list-fetch without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit prerequisite ('Get the id from `get_my_transactions` first') and an explicit exclusion ('this tool does not search or list'), which routes the agent to the right sibling for listing. It also rules out a whole class of misuse by stating there is no way to query another wallet.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_transactionsMy transactionsA
Read-only
Inspect

The user's raw wallet transaction list, newest first and page-numbered. Filter by transaction_type to answer questions about one kind of movement — deposits, withdrawals, swaps, transfers or trigger-order fills. 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. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault
pageNo1-based page number.
limitNoTransactions per page, 1-100. Keep it small.
networkNosolana
token_addressNoRestrict to transactions involving one token. Omit for all.
transaction_typeNoRestrict 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 the eight and both of the missing ones appear in real rows.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, non-destructive, open-world behavior. The description adds important behavioral constraints beyond annotations: the result is scoped to the current user resolved from their API key, and there is no way to query another wallet. It also discloses ordering and pagination style, though it does not discuss rate limits or response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and scope, and most sentences add useful decision guidance. The comparison between history feeds is slightly repetitive, and the type examples are not exhaustive relative to the enum, but there is little wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema, annotations, and 80% schema coverage, the description supplies the remaining context an agent needs: current-user scope, ordering, pagination style, and sibling-tool routing. No critical invocation detail is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, and the schema already documents page, limit, token_address, and the transaction_type enum. The description reinforces the purpose of transaction_type filtering and gives example types, but it does not add syntax or guidance for token_address, page, or limit beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (raw wallet transaction list), ordering (newest first), pagination style (page-numbered), and scope (current user only). It explicitly distinguishes this tool from `get_my_activity`, so an agent can identify it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit guidance for choosing between the two history feeds: prefer `get_my_activity` for the merged timeline, and use `get_my_transactions` when a specific transaction type is needed. It also names the filter field to use for that purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_walletsMy agentic walletsA
Read-only
Inspect

The user's AGENTIC wallets, with their addresses. 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 — an agent's world is agentic wallets only, and every other get_my_* tool here reads from one of these, never from the user's primary wallet. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, non-destructive and open-world semantics, and the description adds real value on top: data is scoped to the current user via API key and there is no way to query another user's wallet. It does not discuss caching, freshness, or why idempotentHint is false, but the added scoping and wallet-class caveats are substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core definition and the deposit instruction, with the wallet-class warning emphasized. Slightly repetitive (the 'agentic wallets only' point is made twice) and the heavy caps/emoji styling adds length, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described; combined with zero parameters and read-only annotations, the remaining gaps an agent could face — scope, wallet class, which chain to deposit to — are all covered. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline applies. The text correctly frames the implicit 'parameter' — whose wallets are returned — as fixed to the API key.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('the user's AGENTIC wallets, with their addresses') and immediately narrows scope so the agent can distinguish it from the many other get_my_* tools. The explicit contrast with regular app wallets removes the most likely confusion at selection time.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives actionable routing ('AI Trading is Solana only for now: tell the user to deposit to the Solana one') and warns that this is the source of truth for all other get_my_* data. It does not name a specific sibling to prefer for a different task (e.g. get_my_balances for balances), so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_watchlistsMy watchlistsA
Read-only
Inspect

The user's watchlists on one network — names and ids only. Pass an id to get_my_watchlist_tokens to read a list's contents. Start here for 'what's on my watchlist' or 'anything on my watchlist moving?'. A watchlist is the tokens the user chose to follow, NOT what they hold (get_my_balances) and NOT other people's wallets. Read-only: adding or removing tokens is not available here. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault
networkNosolana

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds value beyond them by disclosing the return granularity (names and ids only), the identity resolution mechanism (resolved from the API key), and the hard boundary that no other user's wallet can be queried. The statement that adding/removing tokens is unavailable is consistent with, not a repeat of, the read-only hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core fact and the hand-off, and every sentence is short. The final two sentences ("resolved from their API key" and "no way to ask about someone else's wallet") restate the same user-scoping guarantee, which is mild redundancy rather than wasted space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return fields needn't be enumerated; the description still usefully signals the result is names and ids only. For a single-param, read-only list tool, an agent has everything needed: what it returns, what it cannot do, which tool continues the workflow, and whose data it is.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter with 0% schema description coverage, so the description must carry the load. It only says "on one network" without naming solana, while the schema pins network via const with a default — making the parameter effectively choice-free. The gap is small given the const, but the description adds no format or constraint detail beyond what the schema already enforces.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb scope and resource ("The user's watchlists on one network — names and ids only"), plus the return shape. It actively disambiguates from siblings by naming get_my_watchlist_tokens and get_my_balances, and clarifies that a watchlist is followed tokens, not holdings — a distinction that matters among ~70 siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit entry-point guidance ("Start here for 'what's on my watchlist'...") plus an explicit hand-off path ("Pass an id to get_my_watchlist_tokens to read a list's contents"). It also states what the tool cannot do (add/remove tokens, query other wallets) and which sibling covers balances instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_my_watchlist_tokensTokens on my watchlistA
Read-only
Inspect

The tokens on one of the user's watchlists, each with market data in ONE call, so you can triage a list without a get_token_overview per token. Each row carries price_usd, price_change_24hr (24h %, there is no 1h figure here), market_cap, liquidity_usd, whale_count, key_holder_count and token (address, symbol, safety_tier). safety_tier: green = verified; grey = usually fine (not scored yet or a young launchpad token, NOT a red flag — do not skip a coin for being grey); red = caution / DYOR, the only tier to treat as a warning (Moby refuses agent buys on red). Omit watchlist_id for the user's default list on this network; otherwise pass an id from get_my_watchlists (an id that is not the user's is a 404). Use get_token_overview for the full picture of one token. Read-only. This returns the CURRENT USER's own data, resolved from their API key. There is no way to ask about someone else's wallet with this tool.

NameRequiredDescriptionDefault
networkNosolana
watchlist_idNoWatchlist id from get_my_watchlists. Omit for the default list.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only/idempotent/non-destructive, and the description adds what annotations cannot: the 404 behavior for a non-owned watchlist id, that data is scoped to the API-key owner, and the safety_tier semantics (green/grey/red, with an explicit warning that grey is NOT a red flag and that agent buys are refused on red).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, batching benefit, and the alternative, with the safety_tier guidance placed where it matters. It is somewhat dense: enumerating every returned field is partly redundant given an output schema exists, though the semantic notes (gray = not scored, red = Moby blocks buys) earn their space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with an output schema and rich annotations, the description closes every practical gap: default-list behavior, auth scoping, error behavior, and how to interpret returned tiers. Nothing an agent needs to call it correctly or to triage results is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

watchlist_id is covered in both schema and description, with the description adding the default-list rule and the 404 failure mode. The network parameter is undocumented in prose, but it is a const ('solana'), so it needs little explanation; this small gap keeps it below 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the specific resource (tokens on one of the user's watchlists) and the batching behavior (market data in ONE call, replacing a per-token get_token_overview). It explicitly distinguishes itself from both get_token_overview and get_my_watchlists, so an agent can pick it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit conditional usage: omit watchlist_id for the default list on this network, otherwise pass an id from get_my_watchlists. It also points to get_token_overview for the full picture of one token, and rules out asking about another wallet entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_screener_event_filtersMarket-mover filter valuesA
Read-only
Inspect

The VALID VALUES for get_market_movers' event_types, period and market_cap_group arguments, for one network. Call this BEFORE filtering get_market_movers — an invented filter string returns an empty list that reads as 'no events found' rather than 'you guessed a value that does not exist'. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only and open-world safety profile, but the description adds important behavior beyond them: the false-empty-list pitfall for invalid filters and the fact that this is public market data, not the user's wallet or holdings. It also routes agents away from user-specific tools by naming the `get_my_` prefix convention.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tightly structured and front-loaded: it starts with what the tool returns, then gives the call-order instruction and failure mode, then clarifies the data scope. Every sentence adds useful selection or invocation context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description needn't explain return values. It covers purpose, call ordering, the false-empty pitfall, and public-vs-user scope; only the single `network` parameter remains under-explicated, which is a minor gap given its schema const and default.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the only parameter, `network`, is barely addressed by the vague phrase 'for one network.' The description does not name `solana`, say it is the only supported network, or explain whether the parameter affects the returned filter values, so it fails to compensate for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource: the valid filter values for `get_market_movers`' `event_types`, `period`, and `market_cap_group` arguments. It distinguishes this tool from `get_market_movers` itself and from user-data `get_my_` tools, so an agent can identify its role without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs the agent to call this BEFORE filtering `get_market_movers` and explains why: an invented filter string returns an empty list that can be misread as 'no events found.' That is a clear when-to-use rule with a concrete failure mode.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_screener_groupsToken categoriesA
Read-only
Inspect

List the token groups/categories Moby tracks (themes, sectors, narratives). Use this to discover a valid group_id, then pass that to get_group_leaderboard to see the tokens inside it. home_tabs lists the app's Home boards by tab_id (home_majors, home_stocks, home_pulse), also valid group_ids. Moby's leaderboards: Main = get_screener_leaderboard (composite 24h activity, 'what's moving'); Degen = get_degen_leaderboard (newer, smaller, higher risk); Majors = get_group_leaderboard(group_id="home_majors"); Stocks = get_group_leaderboard(group_id="home_stocks") (tokenized stocks); Pulse = get_group_leaderboard(group_id="home_pulse"). The Solana group ids majors_solana / stocks_solana work too, and the home_* ids are listed under home_tabs in get_screener_groups. The Majors and Stocks boards are THE reference for major and tokenized-stock contract addresses: take token_address from the row. Never resolve a major or a stock by ticker search alone, and never keep your own mint list. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only status and open-world behavior, so the bar is lower. The description adds useful behavioral context by stating that this is public market-wide data rather than user-specific data, and it notes that `home_tabs` supplies valid `group_id` values. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose and routing instruction are front-loaded, which is good. However, the description is long for a simple list tool and repeats information, such as the `home_*` group IDs and leaderboard mappings, which could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no required parameters, an output schema, and annotations, so the description is largely complete for invocation. It explains how `group_id` is used and what `home_tabs` provides, though it could briefly clarify the `network` parameter to close the last gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one parameter, `network`, which is constrained to the constant `solana` with a default. The description does not explicitly explain the parameter, though it does mention Solana-specific group IDs. With a single const parameter, this is adequate but adds little beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List the token groups/categories Moby tracks (themes, sectors, narratives).' It also distinguishes this discovery tool from related leaderboard tools by naming them explicitly, so an agent can tell exactly what this tool returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use this tool to discover a valid `group_id`, then pass it to `get_group_leaderboard`, and it maps the other leaderboard tools to their intended contexts. It also clarifies scope: 'This is public market data about the whole market — it is NOT about the user's own wallet or holdings,' with a pointer to `get_my_` tools for user data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_screener_leaderboardToken leaderboardA
Read-only
Inspect

The main Moby token leaderboard: the tokens with the most notable activity right now, ranked best-first by Moby's composite 24h score. Start here when the user asks what is moving, what is trending, or what they should be looking at, and they have not named a specific token. Page 1 is the top of the board — for 'what is hot right now' the default page is the whole answer. Moby's leaderboards: Main = get_screener_leaderboard (composite 24h activity, 'what's moving'); Degen = get_degen_leaderboard (newer, smaller, higher risk); Majors = get_group_leaderboard(group_id="home_majors"); Stocks = get_group_leaderboard(group_id="home_stocks") (tokenized stocks); Pulse = get_group_leaderboard(group_id="home_pulse"). The Solana group ids majors_solana / stocks_solana work too, and the home_* ids are listed under home_tabs in get_screener_groups. The Majors and Stocks boards are THE reference for major and tokenized-stock contract addresses: take token_address from the row. Never resolve a major or a stock by ticker search alone, and never keep your own mint list. Results are capped. Raise limit or step page only if the answer is genuinely not in the first page — a large result costs context that later steps of the same task need. 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. asset_class: tokenized_stock marks tokenized equities (treat as stock proxies, not memecoins). safety_tier: green = verified; grey = usually fine (not scored yet or a young launchpad token, NOT a red flag — do not skip a coin for being grey); red = caution / DYOR, the only tier to treat as a warning (Moby refuses agent buys on red). This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
pageNo1-based page number. Page 1 is the top.
limitNoTokens per page, 1-100. Keep it small.
networkNosolana
whale_windowsNoWindows for the optional per-row `whale` block, e.g. ["h1", "h4"]. Omit for the default row.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only/open-world/non-destructive behavior, but the description adds substantial operational context: capped results, pagination context cost, whale-block field meanings, null semantics, safety_tier meanings, and the red-tier buy restriction. It also clarifies that this is public market data, not the user's wallet data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loads the purpose and usage guidance before moving through alternatives, pagination behavior, whale fields, and safety tiers. Given the crowded sibling set and non-obvious row semantics, the dense sentences earn their place without decorative fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description need not fully document return values, yet it still covers selection context, pagination, whale output interpretation, asset_class, and safety_tier behavior. This gives an agent enough context to invoke and use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 75% schema coverage, the schema documents page, limit, and whale_windows, and the description adds meaningful usage guidance: page 1 is the default answer, raise limit/page only when necessary, and whale_windows adds a per-row whale block with defined buyer/seller counts and net flow. The network parameter is const solana, so the description's lack of elaboration there is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly identifies the resource (Moby token leaderboard), the ranking basis (composite 24h score), and the whole-market public-data scope. It also distinguishes this board from sibling leaderboards and get_my_* tools, so an agent can select it without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the primary use case directly: start here when the user asks what is moving, trending, or what they should look at, and has not named a specific token. It also names alternatives and their conditions, including Degen, Majors, Stocks, Pulse, and get_my_* tools for user-specific data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_smart_money_pulseSmart-money pulseA
Read-only
Inspect

The WHOLE MARKET's whale flow in one call: tracked whale/KOL/smart-money buys, sells and dumps for the last 1h, 4h and 24h (h1, h4, h24). Use it to tell 'whales are dumping everything' from 'this one coin is weak' before reading a single token, instead of paging get_whalewatch_feed_window. Each window has totals, by_wallet_type (whale / kol / smart_money; overlapping, a wallet on two kinds of list counts in both; smart_money is null when unknown), fresh_launch (under_24h / under_1h: trades in tokens launched that recently) and the top 5 tokens by net whale buying (top_net_buy) and selling (top_net_sell). Every slice has trades, tokens, buys, sells, buy/sell volume USD, net_flow_usd, distinct buyers and sellers, dump_sells (sold half or more of the position), dump_wallets and first_buys. One swap counts once; swaps under min_trade_usd are left out. Refreshed every ~2 minutes; data_as_of is when it was computed. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, openWorld, non-idempotent), and the description adds substantial behavior beyond them: ~2-minute refresh cadence with `data_as_of`, the `min_trade_usd` exclusion, one-swap-counts-once accounting, overlapping wallet-type membership (a wallet on two lists counts in both), and `smart_money` being null when unknown.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core claim and the differentiator, and the sentences are dense but purposeful. The long enumeration of every returned slice and field partly restates what the output schema already supplies, which costs some length without adding equivalent value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, the description need not document return shapes, yet it still defines the non-obvious ones (dump_sells = sold half or more of position, fresh_launch thresholds, net_flow_usd). Combined with cache freshness and aggregation rules, an agent has everything needed to call and interpret it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is effectively one parameter (`network`, a const with default 'solana'), so there is little to explain and the 4 baseline applies. The description instead clarifies a server-side filter (`min_trade_usd`) that never appears in the schema, which is genuinely additive even though it is not a parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and scope: whole-market whale/KOL/smart-money buy/sell/dump aggregates across three windows, returned in one call. It explicitly separates itself from the token-level siblings ('before reading a single token') and from the feed-paging tool `get_whalewatch_feed_window`, so an agent can pick it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the decision rule ('tell "whales are dumping everything" from "this one coin is weak"') and names the alternative it replaces ('instead of paging `get_whalewatch_feed_window`'). It also closes the common mis-route by stating this is NOT the user's wallet data and that `get_my_*` tools cover that.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_strategyOne starter strategy, ready to runA
Read-only
Inspect

One starter strategy with its ready-to-run prompt — 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.

NameRequiredDescriptionDefault
strategy_idYesA card `id` from list_strategies.
ask_before_every_tradeNoTrue adds the 'ask me before every trade' line to the prompt.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds real context beyond that: the prompt text is the app-copied canonical version, `ask_before_every_trade` only adds a line on cards where `ask_line_supported` is true, and `app_links` are deep links for the user's phone. It omits behavior on an invalid/unknown `strategy_id`, but otherwise the downstream side-effects (a human-facing instructions session, a separate save call) are clearly disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what is returned, then ordered preconditions and follow-up actions; nearly every clause carries operational information. It is dense with backticked identifiers and could be trimmed slightly, but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering safety, the description need not explain return values, and it supplies the full call-and-save workflow plus the capability-gated flag behavior. Only failure handling for a bad `strategy_id` is unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: `strategy_id` is bound to the `save_active_strategy` call, and `ask_before_every_trade` is qualified by the `ask_line_supported` capability gate, which the schema's plain 'True adds the line' does not mention.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool returns one starter strategy plus its ready-to-run `prompt` text ('the same text the app copies'), which distinguishes it from `list_strategies` (browsing cards) and `save_active_strategy` (persisting a choice). The retrieval verb itself is only implied by 'One starter strategy with...', but the resource and payload are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It sequences the workflow explicitly: run the prompt as standing instructions, confirm editable `chips` with the user first, check `get_my_active_strategies` to avoid double-running, then record via `save_active_strategy` with `strategy_id` after user approval. Alternatives and their selection conditions are named rather than left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_swap_quotePrice a swapA
Read-only
Inspect

Price a token swap before doing it: how much of output_token the user would receive for amount of input_token, plus price impact, fees, the slippage tolerance (slippage_bps) and the least the route can deliver (minimum_output_amount_ui). Quote output_amount_ui to the user — output_amount is in the token's smallest unit. pricing_basis states what produced it. This only prices the trade. It does not move funds and nothing is submitted on-chain. Returns a quote_id that execute_swap consumes. Quotes go stale in seconds — show the numbers to the user, get their answer, and if they hesitate, quote again rather than executing an old one. Always call this before execute_swap so the user sees what they are agreeing to. If execute_swap returns pending or fill_pending, only get_swap_status can tell you it completed.

NameRequiredDescriptionDefault
amountYesHow much of `input_token` to spend, in whole token units (not the smallest unit).
networkNosolana
input_tokenYesContract address of the token being SPENT.
output_tokenYesContract address of the token being RECEIVED.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/destructive=false, but the description adds non-obvious traits: nothing is submitted on-chain, quotes go stale in seconds, and a `quote_id` is returned for downstream consumption by execute_swap. The staleness window is a behavioral constraint no structured field conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the quote fields, then workflow rules. Nearly every sentence is load-bearing, but the pacing is dense and mixes three topics (return fields, safety disclaimer, cross-tool workflow) in one block.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even though an output schema exists, the description flags the two most easily misread return fields (smallest unit vs UI units) and names the lifecycle handoff via quote_id. For a read-only pricing call whose safety profile is annotation-covered, nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, and the description reinforces the critical unit distinction ('`output_amount` is in the token's smallest unit' vs `output_amount_ui`) and the spend/receive direction of input vs output token. It does not explain the `network` parameter, though its const value makes that self-evident.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Price a token swap') and immediately enumerates what the price consists of (output amount, price impact, fees, slippage, minimum output). It explicitly separates itself from execute_swap ('This only prices the trade'), so an agent can distinguish it from the sibling that actually submits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit sequencing ('Always call this before `execute_swap`'), a re-quote rule ('if they hesitate, quote again rather than executing an old one'), and a routing rule for the ambiguous case ('If `execute_swap` returns `pending` or `fill_pending`, only `get_swap_status` can tell you it completed'). Both the when and the when-not are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_swap_statusCheck a swap's outcomeA
Read-only
Inspect

Check where a quote or swap stands, by request_id (the quote_id) OR transaction_signature — exactly one. Moves nothing and is safe to call again. status is one of: not_executed (quoted but never executed — nothing was traded; it can still be executed until quote_expires_at), expired (never executed and now too old — nothing was traded; get a fresh quote if the user still wants it), pending (submitted, waiting for confirmation), confirmed, failed. executed_at is when it was submitted (null = never). Once booked, filled_input_amount_ui / filled_output_amount_ui are what was actually spent and received and effective_slippage_bps how far the fill landed from the quote. A failed swap carries failure_details (transaction_signature, stage, error_class, chain_error, provider). error_class is always set for an on-chain revert: slippage_exceeded (requote), insufficient_funds / insufficient_lamports (the wallet could not cover the trade or SOL for fees/rent), program_error (a program refused it; its code is in chain_error.code), unknown_revert; dropped_tx_blockhash_expired means it never landed. request_id also accepts the Reference ID a failure message printed. A confirmed sell carries resting_order_ids: your orders still live on the token sold (empty once a full sell's exits are all cancelled).

🔴 CALL THIS WHENEVER execute_swap OR quick_buy RETURNED A next_step. A swap can return before its fill is confirmed. Until this tool says the swap succeeded, you do NOT know that it did: never tell the user their tokens have arrived based on the execute response alone, and never re-execute the quote to find out (that would trade twice). If it is still pending, say so and check again shortly.

NameRequiredDescriptionDefault
request_idNoThe `quote_id` of the swap you executed. Give this OR `transaction_signature`.
transaction_signatureNoThe `transaction_signature` the swap returned. Give this OR `request_id`.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and non-destructive, but the description adds substantial non-structured behavior: it "moves nothing," is safe to repeat, warns that the status can be transient (pending) and must not be assumed final, and enumerates every failure class and what each implies for the user. The "safe to call again" wording is compatible with idempotentHint=false because the returned status legitimately changes over time — no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the tool does and the critical call trigger, then structured status-by-status. It is long and dense, and a few clauses (filled amounts, resting orders) border on explaining the output schema, but nearly every sentence changes how an agent should act on the result.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description explains the decision-relevant semantics of status values and error classes that a schema alone would not convey (e.g., not_executed means nothing was traded and can still execute until expiry). For a two-param post-trade status check, nothing an agent needs is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both params are already documented, so the baseline is 3; the description adds real value by stating the exactly-one constraint and by noting that request_id also accepts the Reference ID printed in a failure message — a non-obvious acceptance rule absent from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Check where a quote or swap stands") plus the two mutually exclusive lookup keys, and implicitly separates itself from get_swap_quote (pre-trade) and execute_swap (submission) by being the post-execution read. An agent can tell exactly what this returns and when it applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit trigger ("CALL THIS WHENEVER execute_swap OR quick_buy RETURNED A next_step"), an explicit prohibition with rationale ("never re-execute the quote to find out (that would trade twice)"), and follow-up guidance for the pending case ("if it is still pending, say so and check again shortly"). This is the strongest possible when/when-not coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_chartToken price chartA
Read-only
Inspect

Price history for one token as a series of points, for describing or plotting a trend. period selects the window and defaults to 1d. Prices are in USD. 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. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
periodNo1d
networkNosolana
token_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely new context: prices are USD, data is public market-wide rather than user-scoped, and period has a default. It does not address the idempotentHint=false signal or error/rate-limit behavior, so it stops just short of fully exploiting the low annotation bar.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded: the core behavior leads, the sibling routing follows, and the scope caveat closes. The get_my_* disambiguation is two sentences where one would do, which is the only padding in an otherwise dense definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the chart-vs-candles routing covers the main selection risk. The remaining gap is input-side: acceptable period strings and the token address format are not stated anywhere given 0% schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains `period` semantically (selects the window, defaults to 1d) and clarifies units for the returned prices, but never enumerates valid period values, and says nothing about `token_address` format or that `network` is fixed to solana. Coverage of 3 undocumented params is partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and shape: 'Price history for one token as a series of points, for describing or plotting a trend.' It explicitly names the sibling it could be confused with (get_token_ohlcv) and characterizes the difference (line vs. OHLCV candles), so an agent can discriminate without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit decision rule – 'Prefer the chart unless you need per-candle numbers' – with the condition that selects the alternative. It also pre-empts a second, larger confusion class by contrasting with the get_my_* family. When-to-use and when-not-to-use are both stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_dca_ordersToken DCA ordersA
Read-only
Inspect

PUBLIC, on-chain DCA (dollar-cost-average) orders open against this token — who ELSE in the market is accumulating it on a schedule. ⚠️ NOT the user's own DCAs — those come from get_my_dca_schedules. The two are unrelated datasets that both use the word 'DCA'. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
sizeNoMax rows to scan, 1-500.
networkNosolana
order_byNoamount
token_addressYes
order_directionNodesc

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful context that this is public on-chain market data unrelated to the user's wallet, but it says nothing about result limits, recency, or why idempotentHint is false on a read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The exclusion is front-loaded and the warning marker draws attention to the key disambiguation. However, the 'not your own DCA' point is restated three separate ways, which is more repetition than the disambiguation requires.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the read-only annotations cover safety. The remaining gap is parameter-level guidance for sorting and result sizing, which an agent would need to call this effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20% — only `size` is documented. The description never explains `order_by` (usd_per_min/created/amount/percent_filled), `order_direction`, or `network`, so four of five parameters carry no semantic guidance anywhere. It only implies that `token_address` is the subject token, which is already evident from the name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource with scope: public on-chain DCA orders open against a token, described as what 'who ELSE in the market' is doing. It explicitly contrasts with the sibling get_my_dca_schedules and even names the `get_my_` naming convention, so an agent can disambiguate without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use (market-wide DCA activity for a token) and when-not-to-use (the user's own DCAs), naming the alternative tool by name. The `get_my_` prefix heuristic generalizes the rule to the rest of the toolset.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_holdersAll token holdersA
Read-only
Inspect

ALL top holders of this token, paginated and ranked by size — not just the wallets Moby tracks. get_token_key_holders is the tracked-whale/KOL SUBSET of this same population; this is the full concentration picture. Results are capped. Raise limit or step page only if the answer is genuinely not in the first page — a large result costs context that later steps of the same task need. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
pageNo1-based page number.
limitNoHolders per page, 1-100. Keep it small.
networkNosolana
token_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, non-destructive, open-world), so the description's added value is the disclosure that 'results are capped' and that a large result costs context for later steps — real behavioral context an agent cannot get from the annotations. It stops short of stating what the cap actually is or how ranking ties are handled, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and sibling disambiguation before the operational caveats, and each sentence carries a distinct payload (scope, alternative, cost warning, user-data exclusion). The closing `get_my_` explanation is slightly redundant given the exhaustive sibling list but earns its place as a routing guard against a common confusion.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-shape explanation is unnecessary. For a four-parameter read-only list tool, the description covers purpose, sibling routing, pagination discipline, result capping, and the user-vs-market data boundary — nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: `page` and `limit` are documented in the schema, while `token_address` and the const `network` are not (the latter being self-evident). The description nonetheless adds decision-level meaning to both pagination params — when it is legitimate to raise `limit` or step `page` — which goes beyond the schema's mechanical '1-based page number' and 'keep it small.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('ALL top holders of this token') and immediately scopes it with 'not just the wallets Moby tracks,' which directly distinguishes it from the tracked subset. It then names the sibling `get_token_key_holders` and frames the relationship (subset vs. full concentration picture), so an agent can route between them without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use guidance for pagination ('raise `limit` or step `page` only if the answer is genuinely not in the first page'), names the alternative tool and the condition that selects it, and adds a clear when-not: this is not about the user's own wallet, unlike `get_my_*` tools. Both the positive and negative routing conditions are stated rather than implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_holdingsToken holder distributionA
Read-only
Inspect

Aggregate holder-distribution summary for one token — the concentration picture in bucketed form. For the individually itemised top holders use get_token_holders; for just the tracked whales/KOLs use get_token_key_holders. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana
token_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare this as a read-only, non-destructive, open-world operation. The description adds valuable behavioral context by clarifying that the data is public market data about the whole market, not user-specific information, which helps prevent misuse. It does not discuss idempotency or the non-idempotent annotation, leaving a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then efficiently covers sibling alternatives and the public-data scope. Every sentence adds useful routing or scope information without unnecessary padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because an output schema exists, the description need not explain return values, and the annotations already establish safety. It fully addresses tool selection and data scope, but it leaves the input parameters underspecified given the 0% schema description coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate for undocumented parameters. It only implies that exactly one token is targeted, but does not explain the `token_address` format, required status, or that `network` is constrained to `solana`. The schema itself contains bare fields with no descriptive text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: an aggregate holder-distribution summary for one token, in bucketed concentration form. It explicitly distinguishes itself from similar token-holder siblings and clarifies that it covers public market data rather than the user's own wallet.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternatives explicitly: `get_token_holders` for itemised top holders and `get_token_key_holders` for tracked whales/KOLs. It also provides a clear negative rule: tools prefixed with `get_my_` return the user's own data, so this tool should not be used for personal holdings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_key_holdersToken key holdersA
Read-only
Inspect

The most significant holders of this token and how concentrated ownership is. High concentration is a risk signal worth stating explicitly to the user. ⚠️ These are OTHER people's wallets — this is NOT the user's position in the token. For that, use get_my_position. whale_count/trader_count/kol_count (and the claim's tag_count, when tag is set) are always TRUE totals; page/limit are echoed back. Each row carries the wallet's 30-day win_rate and realized_pnl_30d_usd, and days_since_prev_trade / prev_trade_at for its latest trade in this token (how long the wallet was quiet before it, any token). Rows and counts only include positions worth at least min_position_usd (default $100; each row's value_usd lets you filter further). position is the wallet's tracked buys / sells of THIS token: bought_usd, sold_usd, realized_pnl_usd, buys_count, sells_count, pct_of_peak_held (0-1 of its largest tracked bag still held), first_buy_at, entry_known. Only trades Moby tracked: sells can exceed buys (transfers in, or buys before tracking). When entry_known is false, realized_pnl_usd and pct_of_peak_held are null (unknown, not 0); position is null when Moby never saw the wallet trade the token. KOL platform is never null: unknown plus platform_reason (not_tagged = no platform on record); distinct_kol_platforms counts the known platforms across kols, unknown excluded. Wallet quality: use get_whale_wallet_track_record(wallet_address) for a wallet's win rate and PnL. Results are capped. Raise limit or step page only if the answer is genuinely not in the first page — a large result costs context that later steps of the same task need. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
tagNoClaim 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 / sat_still). Omit for everyone.
pageNo1-based page number.
sortNoRow 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).value
limitNoHolders per page, 1-100. Keep it small.
networkNosolana
token_addressYes
min_position_usdNoMinimum 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.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only safety, but the description adds substantial behavioral context: concentration as a risk signal, true totals for counts, `min_position_usd` filtering, null/unknown semantics, tracked-trade limitations, result caps, and context-cost warnings.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and warnings, but it is one very dense paragraph. It repeats the non-user-wallet point and the public-market disclaimer, which makes it less concise than it could be despite the useful detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, existing output schema, and annotations, the description is complete enough for an agent to interpret results and avoid common mistakes. It covers data scope, caveats, filtering behavior, and alternative tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is decent at 71%, and the description adds meaningful semantics for `min_position_usd`, `tag`, `page`, and `limit`, including defaults, ignored cases, and echoed values. It does not add much about `sort`, but the schema enum is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it returns the most significant holders of a token and concentration information. It distinguishes itself from the user's own position via `get_my_position`, but does not explicitly differentiate from sibling holder tools such as `get_token_holders` or `get_token_whale_holders`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly directs agents to `get_my_position` for the user's own holdings and to `get_whale_wallet_track_record` for wallet quality, and it gives practical guidance about pagination and context cost. It stops short of explaining when to choose this tool over other holder-focused siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_live_feedToken trade feedA
Read-only
Inspect

Trade-by-trade feed of the TRACKED whale, KOL and trader wallets that traded one token, newest first. It is NOT the whole market: only wallets Moby tracks appear. Every tracked trade is listed, with no $ floor (the app's feed hides trades under $100). One row per swap: a wallet that is both a whale and a KOL appears once, with identities, is_whale and is_kol set. Rows exist from when Moby began tracking the token's traders (usually when it first trended); earlier trades are not in this feed. Pass next_cursor back as cursor for the next page until it is null. wallet.win_rate / wallet.realized_pnl_30d_usd are the wallet's 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 (block time, whole seconds), then sequence (the order Moby ingested the trades): several trades by one wallet in the same second come back in the order their position-before values chain. Every row has wallet_list_type (whale, trader or kol). SELL rows carry held_seconds (since the wallet's first buy of the token) and quick_flip: true when it sold within 15 minutes — check for it before treating that wallet's buy as conviction; buy rows leave both null. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
pageNo1-based page number. Ignored when `cursor` is given.
limitNoTrades per page, 1-100. Keep it small.
cursorNo`next_cursor` from the previous response. Wins over `page`; no gaps or duplicates.
networkNosolana
token_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/openWorld/idempotent annotations: discloses that there is no $ floor unlike the app, that data begins when Moby started tracking the token, that duplicate whale+KOL identities are collapsed to one row, that pagination is cursor-based with no gaps or duplicates, and that SELL rows carry held_seconds/quick_flip. These are exactly the non-obvious traits an agent needs before trusting the rows.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the feed is and its main exclusion, and nearly every sentence contributes a distinct fact. It is dense and long, with a couple of sentences (win_rate/realized_pnl, days_since_prev_trade) that could be tightened, but little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still explains the interpretation-critical return fields (identities, is_whale/is_kol, win_rate, held_seconds, quick_flip) and the sort/ordering rule. Nothing an agent needs to call this correctly or read the response is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 60% and the description compensates for the key gap by explaining cursor semantics ('Pass next_cursor back as cursor for the next page until it is null'), which the schema only partly states. It adds no meaning for page, limit or the fixed-value network parameter, so it does not fully close the remaining coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — a trade-by-trade feed of tracked wallets that traded one token — and immediately scopes it ('only wallets Moby tracks appear'). It also distinguishes itself from the get_my_* family and from a whole-market feed in the same breath, so an agent can place it among ~60 siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when NOT to use it: it is not the whole market (only tracked wallets) and not user data, with the naming rule 'get_my_ tools return the user's own data' as a routing heuristic. It does not, however, name the closest token-level siblings (e.g. get_token_smart_money, get_whalewatch_feed) and say which to pick, which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_ohlcvToken candlesA
Read-only
Inspect

Raw OHLCV candles for one token — open, high, low, close and volume per interval — for calculation, technical analysis, or computing a return over a specific window. Prices are always USD (the response says so in denomination). Pick the candle size with interval (1m, 5m, 15m, 1h, 4h, 1d); it wins over timeframe and aggregate. With none of the three the default is 15-minute candles; timeframe alone means 1 unit (hour = 1h). An unsupported size is rejected, never silently swapped, and the response echoes the interval and candle_seconds actually served. t is Unix MILLISECONDS. All three time arguments accept SECONDS or MILLISECONDS, so a t value from a previous response can be fed straight back.

🔴 READ BEFORE COMPUTING A RETURN — the s/t/o/h/l/c/v shape looks like TradingView's, and it differs from it in two ways that will silently corrupt the answer:

  • THE SERIES IS NEWEST-FIRST (descending t), not oldest-first. c[0] is the LATEST close and c[-1] is the OLDEST. A return over the window is (c[0] - c[-1]) / c[-1]; doing it the other way round returns the right magnitude with the WRONG SIGN. The response states this in order.

  • EVERY CANDLE RETURNED IS CLOSED. The current, still-forming interval is removed by default, because its close is a mid-bucket tick rather than a close and including it makes 'the return over the last N candles' wrong. Set include_in_progress_candle only if you specifically want the live, unfinished bucket — it will then be at index 0 and includes_in_progress_candle will be true.

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. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
limitNoHow many candles to return.
networkNosolana
time_toNoWindow end, Unix timestamp in SECONDS or MILLISECONDS — either is accepted. Requires `time_from` as well.
intervalNoCandle size. Wins over `timeframe`/`aggregate`. Omit all three for 15m.
aggregateNoHow many `timeframe` units per candle. 1 when only `timeframe` is given.
time_fromNoWindow start, Unix timestamp in SECONDS or MILLISECONDS — either is accepted. Requires `time_to` as well.
timeframeNoCandle 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_addressYes
before_timestampNoReturn 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_candleNoTrue keeps the current, still-forming candle at index 0. Leave false for any calculation — its close is not a close.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already cover safety, but the description adds critical behavioral details beyond them: newest-first series ordering, closed-candle default, the effect of including the in-progress candle, unsupported interval rejection, and echoed response fields. These are exactly the traits likely to cause silent calculation errors if omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well structured, with the purpose first, interval behavior next, and a clearly marked warning about return-calculation pitfalls. Some interval and timestamp details repeat schema text, but the length is mostly justified by the complexity and risk of silent misuse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description does not need to enumerate return fields, but it still adds the output orientation an agent needs for correct calculation: descending time order, closed candles by default, and USD denomination. It also clarifies the tool's public-market scope relative to wallet-scoped siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high at 80%, and much of the description's parameter guidance is already present in the schema, especially for `interval`, `timeframe`, `aggregate`, `time_from`, `time_to`, and `before_timestamp`. The description reinforces precedence and seconds/milliseconds handling, but adds limited meaning beyond the structured parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: raw OHLCV candles for one token, with open/high/low/close/volume per interval. It explicitly distinguishes this tool from its closest sibling, `get_token_chart`, and clarifies that it is public market data rather than `get_my_` user data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit selection guidance between `get_token_chart` and `get_token_ohlcv`, including when to prefer the chart and when raw candles are needed. It also specifies interval precedence, defaults, and when to use `include_in_progress_candle`, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_overviewToken overviewA
Read-only
Inspect

Everything Moby knows about one token in a single call: price, market cap, liquidity, volume, holder counts, safety signals and metadata. This is the default tool for 'tell me about '. Get token_address from search_tokens. liquidity_source says where liquidity sits: bonding_curve = a launchpad coin not yet migrated, liquidity is its curve reserve (0 = curve drained, everyone sold) and graduation_pct is % of the curve filled; dex_pool otherwise; null = unknown. market_cap is the circulating market cap (market_cap_basis is circulating), or the fully diluted value when Moby has no circulating figure (fully_diluted, flagged in data_notes). fdv is the fully diluted valuation (price x total supply). ath_market_cap (alias ath_mc) is the all-time-high on the same basis as market_cap; ath_fdv is the all-time-high FDV. Compare like with like: a coin is at its ATH only when market_cap ~= ath_market_cap or fdv ~= ath_fdv, never market_cap against ath_fdv. asset_class: tokenized_stock marks tokenized equities (treat as stock proxies, not memecoins). safety_tier: green = verified; grey = usually fine (not scored yet or a young launchpad token, NOT a red flag — do not skip a coin for being grey); red = caution / DYOR, the only tier to treat as a warning (Moby refuses agent buys on red). safety_note spells out the tier. stats.untouched_pct equals the detail.tags Untouched cell's pct: one window (detail.window, last 7 days or since launch) and one denominator (detail.total, current Key Holders plus wallets that sold out in the window). Each wallet gets one tag: Sold out > Trimmed (its Key Holders story chip is trimming, or it sold in the window without buying) > Added (bought in the window) > Untouched. smart_money_read_v2 mixes two windows ON PURPOSE: tier/label/verdict grade the LAST HOUR of tracked-wallet flow (tier is green|yellow|red|holding, label is Buying|Holding|Selling|Mixed|Quiet); color/text/sentences/bullets/stats describe the 7-DAY holder base. They can disagree: green/Buying with red text means buying this hour into a base that churned all week — say both. Gate entries on tier, and read text for what the base did. stats.left_* is every tracked wallet that sold out (what the copy quotes); stats.exited_* is the entry-known subset the ratios use. concentration is the largest tracked holder (supply_pct, bag_to_liquidity, multiple_on_entry); flagged means one wallet carries the read or out-sizes the pool, and tier_cap_reason: concentration means the green hour was capped to yellow for it — treat the buying as one bag, not a crowd. data_notes lists the fields Moby lacks or knows only in part (launchpad unknown, a market_cap that may count one chain of a multichain coin, no holders_count, an unscored safety_tier, a risk scan that is not ok), each with what to verify on the web. When Moby lacks a data point (a null field, or one listed in data_notes), check the web (the project's site, docs or API, DexScreener, X) before quoting it, and never present a Moby-only number as the whole picture. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana
token_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, non-destructive, open-world), but the description goes far beyond them: how safety_tier colours should be interpreted (grey is NOT a red flag), that Moby refuses agent buys on red, that smart_money_read_v2 deliberately mixes a 1-hour tier with a 7-day base and the two can disagree, and that data_notes enumerates known gaps requiring web verification. That is exactly the extra behavioural context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded correctly with the purpose, but the body is a single unstructured wall of several hundred words covering output-field interpretation, alias names, tier colour semantics and window mixing. Much of this overlaps with the existing output schema, and the density makes it hard to scan for the one thing needed at call time.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists and a rich annotation set, the definition is more than complete: it explains how to interpret ATH bases, concentration capping, exited vs left-out wallet stats, and what to do when Moby lacks a data point. Nothing needed to call or interpret the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden. It does add meaning for token_address (source it from search_tokens), but the second parameter, network, is never mentioned even though it is a const/default field the agent may need to reason about. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific resource (one token) and enumerates exactly what it returns (price, market cap, liquidity, volume, holders, safety, metadata), and explicitly declares itself 'the default tool for tell me about <token>'. This clearly separates it from siblings like get_token_price, get_token_holders and get_token_chart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the default-use case, tells the agent where to obtain the required argument ('Get token_address from search_tokens'), and gives an explicit exclusion: market data only, not the user's own wallet — use get_my_* tools for that. Both a positive routing rule and a negative one are present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_priceToken priceA
Read-only
Inspect

The current USD price of one token, and nothing else. Cheapest call for a price check; use get_token_overview if you also need market cap, liquidity or volume. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana
token_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations: it is the cheapest price-check option and covers whole-market public data rather than user holdings. It does not describe freshness, rate limits, or response shape, but those gaps are minor given the annotations and output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core behavior and then uses short, purposeful sentences for cost guidance, alternative routing, and wallet-data clarification. No sentence is redundant or wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple price lookup with an output schema and read-only annotations, the description is complete enough: it covers what the tool returns, when to prefer it, and which sibling to use for richer market data. The remaining parameter-format gap is small relative to the structured schema and output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needs to compensate for parameter meaning. It only implies that 'one token' must be identified and never mentions `token_address`, its expected format, or the fixed `network` value, leaving the required parameter under-explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: the current USD price of one token, and explicitly limits scope with 'and nothing else.' It also distinguishes this tool from `get_token_overview` and from the `get_my_` family, so an agent can select it without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says when to use it ('Cheapest call for a price check') and names the alternative plus the condition for choosing it ('use `get_token_overview` if you also need market cap, liquidity or volume'). It further clarifies when not to use it by stating that public market data is not the user's wallet data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_risk_signalsToken risk signalsA
Read-only
Inspect

Holder-concentration and contract risk for one token: sniper, insider, bundler and fresh-wallet shares, dev hold, mint/freeze authority, honeypot and buy/sell tax. Same fields and rules as the Moby app's Risk Signals block. status is ok / pending / unavailable / unsupported: pending means retry in a few seconds; unavailable and unsupported mean no data (do not hammer). Nulls mean no data, not zero (all-zero holder cohorts are reported as no data). Early buyers stay unavailable. fetched_at tells how fresh the read is. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana
token_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, non-destructive, openWorld), and the description goes well beyond by defining all four status values with retry semantics, explaining that nulls mean no data rather than zero, noting all-zero holder cohorts collapse to no data, and pointing at fetched_at for freshness. This is exactly the operational context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the signal list, then status/null/freshness caveats, then the wallet-vs-market boundary. Dense but each sentence carries operational weight; the status sentence is slightly packed with four values and two behaviors, though none of it is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, yet the description still explains the ambiguous parts an agent would otherwise misread (status states, null semantics, freshness). Nothing needed to call this correctly — token address plus fixed solana network — is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 2 parameters, and the description only implies the token_address parameter via 'for one token' — no address format, chain, or expected input shape. The network param (const solana) goes unmentioned entirely. Partial compensation, not enough to fully cover the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource and scope: holder-concentration and contract risk for one token, then enumerates the concrete signals (sniper/insider/bundler/fresh-wallet shares, dev hold, mint/freeze authority, honeypot, buy/sell tax). It also draws an explicit boundary against the get_my_* family, so an agent can distinguish it from get_token_holders or get_token_key_holders on intent alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operating guidance: pending means retry in a few seconds, unavailable/unsupported mean no data and should not be hammered, and 'early buyers stay unavailable.' It also states this is market-wide data, not the user's own holdings, routing to get_my_* tools. It stops short of naming a content-adjacent alternative (e.g. get_token_holders for raw holder lists), so not a full when/when-not/alternatives treatment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_smart_moneySmart money on a tokenA
Read-only
Inspect

Which tracked high-performing wallets (whales, KOLs, proven traders) are positioned in this token, and on which side. This is Moby's core edge signal — it answers 'is anyone good in this?'. These are OTHER people's wallets, never the user's. Each window (h1, h4, h24) carries last_buy_at / last_sell_at (newest buy / sell in that window) and the response data_as_of (when the windows were rolled up; each ends there). A net that flips with no newer last_sell_at means older buys aged out, not new selling. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana
token_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/openWorld annotations, the description discloses response semantics that are not obvious: per-window last_buy_at/last_sell_at fields, a shared data_as_of rollup boundary, and a specific interpretation trap (a net that flips without a newer last_sell_at means aged-out buys, not new selling). That is exactly the kind of behavioral context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The lead sentence is front-loaded with the actual question the tool answers, and the window/data_as_of caveat earns its space. However, the 'never the user's wallets' point is made twice in near-identical wording, which is redundant for a description of this length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only tool with annotations covering safety and an output schema covering return shape, the description supplies everything else an agent needs: what the signal means, the time-window structure, and the main misreading to avoid. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across two parameters, so the description must compensate and largely doesn't. 'This token' weakly implies token_address, but the network parameter (const 'solana', defaulted) is never mentioned, nor is the expected address format for token_address.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (tracked high-performing wallets positioned in a token) and the dimension returned (which side they're on), with a concrete framing question ('is anyone good in this?'). It cleanly separates itself from the get_my_* family, but does not differentiate against close token-holder siblings like get_token_whale_holders, get_token_key_holders, or get_top_held, so an agent could still hesitate between them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context ('Moby's core edge signal') and an explicit exclusion plus alternative: it is not the user's own data, and tools prefixed get_my_ return that. There is no guidance on when to prefer this over the other token-holder/whale-holder tools, which is the more likely sibling confusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_trade_briefPre-trade briefA
Read-only
Inspect

START HERE for pre-buy research on one token: a compact brief (a few KB) in one call instead of 5-10. Sections: about (description, socials, age, launchpad; liquidity_source, and graduation_pct while on a bonding curve), safety (safety_tier + safety_note), smart_money_flow (h1/h4/h24 net $, buy vs sell counts, last_buy_at / last_sell_at, data_as_of), smart_money_read (tier graded over tier_window = 1h, headline, bullets, concentration, tier_cap_reason), risk_signals (snipers / insiders / bundlers / dev hold / authorities, status), key_holders (top 10 positions >= $100: size, entry MC, last_tx, per-coin position, 30-day win_rate / realized_pnl_30d_usd), recent_quality_trades (newest 10 tracked trades among the last 100 by wallets with win_rate >= 0.5 AND 30-day realized P/L > 0; wallet_list_type, quick_flip, days_since_prev_trade) and market (market cap, fdv, ath_market_cap, ath_fdv, liquidity, 24h volume, pct_from_ath on the market_cap_basis pair). Each section carries its own computed_at / data_as_of. A failed section is null with its reason in errors; the rest are still valid. Cached 15 s. Go deeper with get_token_key_holders (paging, claim tags), get_token_live_feed (every trade), get_whale_wallet_profiles (rate holders), get_token_risk_signals (re-poll a pending scan), get_token_ohlcv (price action) and get_token_overview (the full read). safety_tier: green = verified; grey = usually fine (not scored yet or a young launchpad token, NOT a red flag — do not skip a coin for being grey); red = caution / DYOR, the only tier to treat as a warning (Moby refuses agent buys on red). data_notes lists the fields Moby lacks or knows only in part (launchpad unknown, a market_cap that may count one chain of a multichain coin, no holders_count, an unscored safety_tier, a risk scan that is not ok), each with what to verify on the web. When Moby lacks a data point (a null field, or one listed in data_notes), check the web (the project's site, docs or API, DexScreener, X) before quoting it, and never present a Moby-only number as the whole picture. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana
token_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile, and the description adds things they cannot: a 15s cache, partial-failure semantics (a failed section is null with its reason in `errors` while the rest stay valid), and per-section `computed_at`/`data_as_of` freshness. It also encodes the non-obvious grading semantics — grey is not a red flag and should not cause a skip, while red causes Moby to refuse agent buys — which is exactly the behavioral context an agent needs to act correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the routing instruction and the value proposition before the detail, and nearly every clause carries actionable semantics (win_rate >= 0.5 threshold, top-10 >= $100, `pct_from_ath` basis). The long enumeration of report sections overlaps with the existing output schema, which is the main slack, but the enumerated tiers and thresholds still earn most of their space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a rich output schema, a caching layer, degradation behavior, and a `data_notes` mechanism, the description covers everything an agent needs: what a null means, what `data_notes` implies about verification, how to treat each `safety_tier`, and the falsification duty ('check the web before quoting'). No material gap remains for correct invocation and interpretation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, but it never discusses the two parameters. It implies a single token ('on one token') yet gives no address format, no statement of whether tickers are accepted (search_tokens is the sibling for that), and never mentions the `network` parameter at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — a one-call pre-trade research brief on a single token — and quantifies the payoff ('a few KB in one call instead of 5-10'). It explicitly positions itself as the entry point and names the siblings it replaces, so an agent can distinguish it from get_token_overview or get_token_live_feed without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with 'START HERE' and then routes the agent in both directions: which sibling to use to go deeper and why (paging, every trade, rate holders, re-polling a pending scan, price action, full read). It also draws a clear scope boundary, telling the agent this is market data, not user data, and that `get_my_*` tools are the ones for the user's own wallet.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_whale_holdersTracked whales holding a tokenA
Read-only
Inspect

Tracked WHALES holding this token, GROUPED BY WHALE LIST. get_token_key_holders returns the same population UNGROUPED (whales and KOLs together); use this when the question is 'which KIND of whale is in this'. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana
token_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, so safety is covered. The description adds meaningful context beyond that: this is whole-market public data rather than user-scoped data, which prevents a common misroute. It does not discuss pagination or result size, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The differentiating behavior is front-loaded in the first clause and every sentence carries routing information. The all-caps emphasis (WHALES, GROUPED BY WHALE LIST, UNGROUPED, NOT, get_my_) is slightly noisy but does aid scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the population/grouping semantics are fully covered. The remaining gap is parameter-level detail on the required token_address, which the description leaves entirely to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions token_address or network, so neither field gains any meaning beyond its bare name. The agent must infer that token_address is a Solana mint address and that network is fixed to solana from the const alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (tracked whales holding a token) plus the key differentiator: results are GROUPED BY WHALE LIST. It also names the sibling that returns the same population ungrouped, so an agent can pick between them without reading either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use criterion is given: 'use this when the question is which KIND of whale is in this'. It names the alternative (get_token_key_holders) and the excluded scope (not the user's own wallet/holdings), pointing to the get_my_ prefix convention for personal data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_token_x_profileToken's X/Twitter profileA
Read-only
Inspect

The project's X/Twitter account: follower count, age, verification — 'is this project's social presence real or a two-day-old burner'. ⚠️ CALL SPARINGLY: X charges paid credits per lookup. Not for routine enrichment of every token in a list. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana
token_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/non-destructive safety, but the description adds genuinely new behavioral context: each lookup consumes paid X credits, so call volume has a real cost. It also discloses scope (public market data about the whole market, not the caller's wallet). It does not address why idempotentHint=false on what looks like a pure read, nor caching/freshness of the profile — a small remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core value proposition and the cost warning are front-loaded in the first two clauses. The closing sentences about get_my_* tools are somewhat tangential to this tool's function, but they earn their place by preventing a common sibling-selection error.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need no explanation, and annotations plus the cost note cover behavior well. What's missing is the one thing the schema can't supply: what token_address should look like and whether any preconditions apply. Adequate, but with a clear parameter-level hole.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions token_address or network. For a 2-param tool where one parameter is the sole required input, the agent gets no guidance on format (mint address vs. symbol) or on the solana-only const. The description leaves all parameter meaning to bare titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (the project's X/Twitter account) and enumerates what it returns: follower count, age, verification. The framing question ('is this project's social presence real or a two-day-old burner') makes the purpose unmistakable and separates it from token-market siblings like get_token_overview or get_token_risk_signals.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-not ('Not for routine enrichment of every token in a list') plus an operational constraint ('CALL SPARINGLY'). It also routes the agent away from the whole get_my_* family by naming that prefix as the alternative for user-owned data, which is a concrete disambiguation rule rather than an inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_top_heldTop-held tokens leaderboardA
Read-only
Inspect

TOKENS ranked by aggregate USD held, either by tracked WHALES or by Moby USERS — never a person-vs-person ranking. Use holder_type=whale (default) for 'what are whales piling into'; holder_type=user for 'what do Moby users collectively hold most of'. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana
holder_typeNowhale

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, openWorld, non-destructive, and non-idempotent, so the safety profile is covered. The description adds genuinely useful scope context beyond that: the data is aggregate public market data, not per-identity ranking and not user-scoped. It stops short of saying how many tokens come back or whether results are cached/refreshed, which matters for a leaderboard.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the ranking definition, then the parameter semantics, then the scope exclusion. The final sentence about `get_my_` tools is a deliberate disambiguation rather than padding, and every sentence changes how the tool would be invoked.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return shape need not be explained, and annotations cover the safety profile. The remaining gap is envelope-level: result count/limit and whether the ranking is time-windowed are unstated, which affects interpretation of the output. Otherwise complete for a 2-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden, and it does: `holder_type` is given a default and a concrete meaning for each of its two enum values. `network` is never mentioned, but it is a `const: solana` with a default and needs no elaboration. The semantic gap is effectively closed for the one non-trivial parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and metric: tokens ranked by aggregate USD held, with the two possible holder populations named inline. It also draws a hard boundary against person-vs-person rankings and against user-owned portfolio tools. It loses a point because the closest sibling, get_kol_top_held, is never mentioned, so the agent must infer which of the two 'top held' leaderboards applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly maps each enum value to an intent question: `holder_type=whale` (default) for 'what are whales piling into', `holder_type=user` for 'what do Moby users collectively hold most of'. It also states a when-not: this is not the user's own wallet, and routes that need to the `get_my_*` family by name pattern. Little is left to inference for the primary use decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whale_wallet_holdingsWhale wallet holdingsA
Read-only
Inspect

What one TRACKED WHALE wallet currently holds. ⚠️ This is somebody else's portfolio, taken from Moby's public whale-tracking data. It is NOT the user's portfolio under any circumstances — for that, call get_my_balances. Take wallet_address from a WhaleWatch feed result; addresses may be returned as stable opaque references rather than raw addresses, and those references work here. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana
wallet_addressYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, non-destructive, open-world), so the description's added value is provenance (Moby public whale-tracking data) and the non-obvious fact that opaque wallet references from WhaleWatch are valid inputs here. That is real context beyond the annotations. Minor deduction for repeating the ownership caveat three times instead of adding further behavior detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical disambiguation is front-loaded, but the "not the user's portfolio / not about the user's wallet / `get_my_` tools are yours` idea is restated three separate times with emphasis markers. The repetition crowds out space for the unmentioned `network` parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation; provenance, argument sourcing, and the ownership disambiguation are all covered. The only gap is the unmentioned `network` parameter, which is low-risk given its constant default.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the `wallet_address` semantics — and it does: it says where to get the value and that opaque references (not just raw addresses) are accepted, which the bare `string` type would never convey. The `network` parameter goes unmentioned, though its `const: solana` default makes it effectively self-documenting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource — what one tracked whale wallet currently holds — and immediately scopes it to a third party. The contrast with `get_my_balances` makes it unmistakable against the large sibling set of `get_my_*` and `get_whale_wallet_*` tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when NOT to use it (never for the user's own portfolio) and names the correct alternative (`get_my_balances`). It also tells the agent where to source the required argument — a WhaleWatch feed result — and generalizes that any `get_my_` tool returns user data, which routes the whole family correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whale_wallet_pnl_chartWhale wallet PnL chartB
Read-only
Inspect

A TRACKED WHALE's cumulative realized PnL over time — is the track record a steady climb or one lucky trade? ⚠️ Somebody else's equity curve, never the user's. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
periodNo30d
networkNosolana
wallet_addressYesTracked trader wallet, from a WhaleWatch feed. Opaque references work too.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description's real contribution is data provenance — that this is public market data about someone else's equity curve, never the user's — which meaningfully prevents misuse. It adds nothing about freshness, caching, or what happens if the wallet isn't tracked.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose leads the description and the disambiguation follows, which is the right order. The 'not the user's wallet' idea is restated twice, which is slightly redundant, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is rightly omitted, and the output-side burden is low. The description is nevertheless thin on the input side: with two of three parameters undocumented anywhere, an agent knows what the tool answers but not how to drive it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%: wallet_address is documented but period (enum 1d/7d/30d/1y) and network (const solana) carry only titles. The description never mentions either parameter, so an agent gets no guidance on how the period selection changes the chart window or that network is fixed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: cumulative realized PnL over time for a tracked whale, with an evocative framing (steady climb vs one lucky trade) that tells the agent what question the tool answers. It does not differentiate from close siblings like get_whale_wallet_track_record, get_whale_wallet_wins, or get_whale_wallet_positions, which an agent could easily confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a strong negative rule: not the user's own data, and tools prefixed get_my_ return the user's data — that is genuine routing guidance. However, it offers no positive 'use this when...' relative to the other whale wallet siblings, so within the whale_* family the agent still has to guess.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whale_wallet_positionsWhale wallet positions with cost basisA
Read-only
Inspect

A TRACKED WHALE's current holdings WITH cost basis and unrealized PnL per position. Richer than get_whale_wallet_holdings, which is amount + USD value only. ⚠️ Somebody else's positions, never the user's — for the user's own, use get_my_balances or get_my_position. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana
wallet_addressYesTracked trader wallet, from a WhaleWatch feed. Opaque references work too.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false, so the safety profile is covered. The description adds that this is public market data about a third-party wallet, which is genuinely useful framing, but says nothing about freshness, cost-basis computation basis, or what happens with an untracked/opaque address beyond the schema note.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and the sibling contrast lands early, but the 'this is not the user's data' point is made three times in successive sentences (⚠️ clause, 'it is NOT about the user's own wallet', and the `get_my_` prefix rule). Useful signal, over-repeated; two of those sentences could collapse into one.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so return values need not be described, and annotations cover safety. What remains is minor: the solana const param is undocumented and PnL/cost-basis semantics (which currency, realized vs unrealized) are only implied by the title.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: wallet_address is documented (tracked trader wallet, opaque references work), network is a const 'solana' with no description. The description adds no parameter-level meaning, so the schema carries the load and baseline 3 applies for a borderline-coverage 2-param tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: a tracked whale's current holdings with cost basis and unrealized PnL per position. Explicitly contrasts with get_whale_wallet_holdings (amount + USD value only), so an agent can pick between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternatives and the condition that selects them: use get_my_balances or get_my_position for the user's own data, and get_whale_wallet_holdings for the lighter view. Also gives a naming heuristic (`get_my_` prefix = user data) that generalizes across the large sibling set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whale_wallet_profileWhale wallet full profileA
Read-only
Inspect

THE RICHEST WHALE READ ON THIS SURFACE: one call combining identity, realized track record, current holdings, recent trades, and whether Moby has stopped tracking this wallet (identity.tracking_paused_at). Prefer this over calling get_whale_wallet_track_record + get_whale_wallet_positions separately. windows.d7 and windows.d30 give realized P/L, closes, win rate, avg/median hold days and the share of closes held under 24h for each window. No colour: use read.situation + the window stats. include_holdings=false returns stats only (holdings and read null) — much smaller; to rate many wallets use get_whale_wallet_profiles. data_as_of is when this was computed; a wallet Moby has SEEN but knows nothing about yet comes back with null sections rather than an error. ⚠️ Somebody else's profile, never the user's — for the user's own wallet use get_my_* tools. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana
wallet_addressYesTracked trader wallet, from a WhaleWatch feed. Opaque references work too.
include_holdingsNofalse = stats only, no holdings (smaller, faster). Default true.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly, non-destructive), and the description adds context they cannot: `data_as_of` freshness semantics, that unseen-but-known wallets return null sections rather than an error, that `include_holdings=false` nulls both holdings and the read section, and that `identity.tracking_paused_at` signals Moby stopped tracking. It also tells the agent how to interpret results (no colour; use `read.situation` + window stats), which is genuinely non-obvious behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening is front-loaded and dense with useful signal, but the closing three sentences all restate the same warning ('never the user's profile… NOT about the user's own wallet… `get_my_` tools return the user's own data'). That is roughly a third of the text spent on one point already made once, which dilutes the higher-value content above it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still names the key result fields (`windows.d7`/`d30` P/L, closes, win rate, hold days, sub-24h share) so the agent knows what it can answer with this call. Combined with freshness, null-return, and scale-out guidance, nothing needed to invoke or interpret it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 67% schema coverage, the description adds real meaning for `include_holdings` — not just 'smaller, faster' as the schema says, but that holdings AND the read section come back null. `wallet_address` opaque-reference behavior is already in the schema, and `network` is a const so needs no explanation. Good compensation, though not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('one call combining identity, realized track record, current holdings, recent trades') and names the exact sibling calls it replaces (`get_whale_wallet_track_record` + `get_whale_wallet_positions`). An agent can distinguish it from `get_whale_wallet_holdings`, `get_whale_wallet_profiles`, and the `get_my_*` family without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing rules: prefer this over the two separate calls, use `get_whale_wallet_profiles` when rating many wallets, use `include_holdings=false` for the cheap path, and use `get_my_*` tools for the user's own wallet. The when-not-to-use case (user's own data) is stated twice, which is over-insured but unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whale_wallet_profilesRate many whale wallets at onceA
Read-only
Inspect

Rate 10-20 key holders before a buy in one call; stats only, no holdings. Pass the wallet_address refs from get_token_key_holders (max 20). Each profile carries windows.d7 / windows.d30 (realized P/L, closes, win rate, median hold, short-hold share), track_record, realized and identity. A wallet Moby has never seen is left out — match rows on wallet_ref. For one wallet's holdings use get_whale_wallet_profile. ⚠️ Other people's wallets, never the user's. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana
wallet_addressesYes1-20 tracked wallet refs, e.g. from get_token_key_holders.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/non-destructive, and the description goes meaningfully beyond them: stats-only payload (no holdings), the partial-result rule ('a wallet Moby has never seen is left out — match rows on wallet_ref'), and the input provenance requirement. It does not explain why `idempotentHint` is false (data drifting between calls), which is the one annotation-relevant trait left unaddressed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, batch size, and payload shape; field names and sibling routing follow logically. The tail loses a point for redundancy — 'never the user's wallet', 'NOT about the user's own wallet', and the `get_my_` pointer restate the same disambiguation three times.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite an output schema existing, the description still names the returned fields (`windows.d7`/`d30`, `track_record`, `realized`, `identity`), which is more than required. Caller has everything needed: where the refs come from, the cap, what comes back, and how to handle missing wallets.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, and the description compensates on the important half: `wallet_addresses` are 'refs from get_token_key_holders', capped at 20, plus the warning to match returned rows on `wallet_ref` rather than assuming positional correspondence. `network` is undocumented but is a fixed const 'solana', so the gap is low-risk.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource ('Rate 10-20 key holders' / whale wallet profiles) with explicit batch scope. It immediately separates itself from the singular sibling by naming `get_whale_wallet_profile` as the one-wallet alternative and by stating 'stats only, no holdings' versus the holdings tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete use case ('before a buy'), a concrete input source (`get_token_key_holders` refs, max 20), and an explicit alternative for the single-wallet case. The exclusion 'never the user's wallet' plus the routing rule for `get_my_*` tools closes the most likely mis-selection path in this catalog.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whale_wallet_track_recordWhale wallet track recordA
Read-only
Inspect

The full track record behind a TRACKED WHALE: win rate, realized PnL, trade count, typical hold time, and whether Moby has finished indexing it (backfill_state). Judge whether a wallet seen in a WhaleWatch feed is actually good before weighting its activity. For everything in one call — including current holdings and the caller's own follow state — use get_whale_wallet_profile instead. ⚠️ Somebody else's track record, never the user's. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana
wallet_addressYesTracked trader wallet, from a WhaleWatch feed. Opaque references work too.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, non-destructive, open-world), so the description focuses on scope: this is public market data about someone else's wallet, never the user's. It also explains that `backfill_state` reflects whether Moby has finished indexing, which tells the agent results may be incomplete. It stops short of describing latency, error behavior, or why idempotentHint is false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Core purpose and the sibling routing rule are front-loaded, which is the right structure. The closing warning is somewhat redundant, restating the 'not the user's own data' point across two sentences, which slightly dilutes an otherwise tight definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no further explanation, yet the description still names the key metrics. Combined with the scope warning and the sibling pointer, nothing an agent needs to select and call this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, but the undocumented `network` parameter is a const with a default ('solana'), so it is effectively self-documenting. `wallet_address` is already described in the schema, and the description adds only the notion of a 'TRACKED WHALE' from a WhaleWatch feed — marginal value beyond structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (retrieve the full track record for a tracked whale) and enumerates the returned metrics: win rate, realized PnL, trade count, hold time, backfill_state. It explicitly names the sibling `get_whale_wallet_profile` as the broader alternative, so an agent can separate the two without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit use case ('judge whether a wallet seen in a WhaleWatch feed is actually good before weighting its activity') and an explicit routing rule to `get_whale_wallet_profile` when holdings and follow state are also needed. It also draws a hard line against the `get_my_*` family for personal data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whale_wallet_winsWhale wallet winsA
Read-only
Inspect

The biggest realised wins of one TRACKED WHALE wallet — its top closed trades by profit, at most five. Use it to judge whether a wallet seen in a WhaleWatch feed is actually good before weighting its activity. ⚠️ Somebody else's track record, not the user's — the user's own realised results come from get_my_closed_positions. An empty list means no wins data was available, not that the wallet has never won. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana
wallet_addressYesTracked trader wallet, from a WhaleWatch feed. Opaque references work here too.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, open-world, and non-destructive, but the description adds traits they cannot: results are capped at five, the data is third-party market data rather than the user's, and an empty list means "no wins data available" rather than "wallet never won." That last point materially changes how an agent reports the outcome.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core facts are front-loaded and useful, but the same warning is restated three times — "not the user's," "NOT about the user's own wallet," and "tools whose names start with get_my_ are the user's." Two of those sentences could be merged without losing information, and the repetition crowds out the undocumented `network` parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description covers scope, cap, empty-result semantics, and data ownership. The only real gap is the unexplained `network` parameter, which is minor given it is a constant/optional field defaulting to solana.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: `wallet_address` is documented (including that opaque references work) and the description reinforces "one TRACKED WHALE wallet," narrowing the acceptable input source. However, the `network` parameter is never addressed and the description adds no syntax or sourcing detail beyond the schema, so the baseline 3 fits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"The biggest realised wins of one TRACKED WHALE wallet — its top closed trades by profit, at most five" names a specific verb (rank by realised profit), a specific resource (closed trades of a single wallet), and a hard cap. It is clearly distinguishable from siblings like get_whale_wallet_track_record or get_whale_wallet_positions without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the use case explicitly — judge whether a wallet seen in a WhaleWatch feed is good before weighting its activity — and names the alternative for the adjacent need (`get_my_closed_positions` for the user's own realised results). It also states the empty-list interpretation rule so the agent does not misread a no-data result as a negative verdict.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whalewatch_feedWhale transaction feedA
Read-only
Inspect

Moby's WhaleWatch feed: buys and sells by tracked whale wallets across the market, newest first. Filter to one token with token_address, to one tracked wallet with wallet_address, or to specific whale lists with list_ids (from get_whalewatch_lists). ⚠️ wallet_address here filters TRACKED WHALE wallets — it is not the user's wallet and cannot be used to look up the user's own trades. Use get_my_activity for those. For a bulk read of a whole time window, use get_whalewatch_feed_window. Rows sort by timestamp (block time, whole seconds), then sequence (the order Moby ingested the trades): several trades by one wallet in the same second come back in the order their position-before values chain. Every row has wallet_list_type (whale, trader or kol). SELL rows carry held_seconds (since the wallet's first buy of the token) and quick_flip: true when it sold within 15 minutes — check for it before treating that wallet's buy as conviction; buy rows leave both null. include_context=true adds a per-row context block: pnl_pct_vs_entry (the trade price vs the wallet's own average entry, as a fraction), tags (what the trade looked like, e.g. profit taking), hold_days_at_trade, share_sold_of_position, position_before_usd, entry_vwap_before, days_since_prev_trade + prev_trade_at (how long the WALLET was quiet before this trade, any token) and wallet_win_rate + wallet_realized_pnl_30d_usd (the wallet's 30-day quality). Unknown values are null — pnl_pct_vs_entry is null whenever the wallet's entry was never seen, days_since_prev_trade when Moby has no earlier trade for the wallet. Wallet quality: use get_whale_wallet_track_record(wallet_address) for a wallet's win rate and PnL. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
pageNo1-based page number.
limitNoTrades per page, 1-100. Keep it small.
networkNosolana
list_idsNoWhale list ids from `get_whalewatch_lists`. Omit for all lists.
token_addressNoRestrict to whale trades in this one token.
wallet_addressNoRestrict to one TRACKED WHALE wallet. Not the user's wallet.
after_timestampNoOnly trades after this instant. ISO 8601 UTC, e.g. `2026-08-11T14:30:00Z`.
include_contextNoAdd the per-row `context` block (position/PnL facts for each trade).
before_timestampNoOnly trades before this instant. ISO 8601 UTC, e.g. `2026-08-11T14:30:00Z`.
transaction_typesNo`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.
min_days_since_prev_tradeNoOnly 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 on record do not match. Omit for all.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, non-destructive, non-idempotent, open world), and the description adds real behavioral context: sort order (timestamp then ingestion `sequence`), null semantics for unknown values, and the fact that filtering rejects unrecognised enum values instead of silently dropping them. It does not discuss pagination depth/limits or rate/cost, so it stops short of full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and filters, but the 'this is public market data, not the user's own wallet' caveat appears twice (in the ⚠️ warning and again in the closing paragraph), and the long per-field `context` enumeration largely duplicates the output schema. Dense and useful, but padded beyond what an agent needs to select and call the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter, zero-required filtering tool, the description plus a 91%-covered schema and an output schema leaves nothing blocking a correct call: scope, filter sources, sort order, null handling, and cross-tool routing are all covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 91%, so the baseline is 3; the description earns above that by disambiguating the riskiest parameter (`wallet_address` = tracked whale, not the user) and pointing `list_ids` at its source tool. It expands `include_context` into the concrete fields returned. `transaction_types`, `min_days_since_prev_trade` and the timestamp filters are left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — buys and sells by tracked whale wallets across the market, newest first — and immediately scopes it against siblings (get_my_activity for the user's own trades, get_whalewatch_feed_window for bulk time windows). An agent can distinguish this from get_whalewatch_home_feed/get_whalewatch_kol_feed only indirectly, but the core resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names alternatives and the condition that selects each: get_my_activity for the user's own trades, get_whalewatch_feed_window for a bulk read of a whole window, get_whalewatch_lists to obtain list_ids, get_whale_wallet_track_record for wallet quality. It also carries a hard 'when-not' warning about `wallet_address` not being the user's wallet.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whalewatch_feed_windowWhale trades in a time windowA
Read-only
Inspect

Every tracked-whale buy and sell inside one time window (at most 48 hours), for bulk reads such as 'everything whales did in the last 6 hours'. Unlike get_whalewatch_feed, it returns ONE ROW PER SWAP (the plain feed repeats a swap once per whale list the wallet is on; list_id here is one of the matching lists), and pages with a cursor: pass next_cursor from the previous response as cursor until it is null. Rows are newest first and new trades never shift a page. Filter by side, minimum trade size, minimum market cap, trade actions, whale list_ids and min_days_since_prev_trade (wallets waking up after a quiet spell). A window longer than 48h is rejected. Rows sort by timestamp (block time, whole seconds), then sequence (the order Moby ingested the trades): several trades by one wallet in the same second come back in the order their position-before values chain. Every row has wallet_list_type (whale, trader or kol). SELL rows carry held_seconds (since the wallet's first buy of the token) and quick_flip: true when it sold within 15 minutes — check for it before treating that wallet's buy as conviction; buy rows leave both null. include_context=true adds a per-row context block: pnl_pct_vs_entry (the trade price vs the wallet's own average entry, as a fraction), tags (what the trade looked like, e.g. profit taking), hold_days_at_trade, share_sold_of_position, position_before_usd, entry_vwap_before, days_since_prev_trade + prev_trade_at (how long the WALLET was quiet before this trade, any token) and wallet_win_rate + wallet_realized_pnl_30d_usd (the wallet's 30-day quality). Unknown values are null — pnl_pct_vs_entry is null whenever the wallet's entry was never seen, days_since_prev_trade when Moby has no earlier trade for the wallet. Wallet quality: use get_whale_wallet_track_record(wallet_address) for a wallet's win rate and PnL. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
limitNoSwaps per page, 1-1000. Keep it small unless you need the whole window.
cursorNo`next_cursor` from the previous page. Omit for the first page.
actionsNoWhat the trade did to the wallet's position: `first_buy`, `re_entry`, `add`, `trim`, `close`, `sell_unknown_entry`. Omit for all.
networkNosolana
list_idsNoWhale list ids from `get_whalewatch_lists`. Omit for all lists.
min_amount_usdNoOnly trades of at least this many USD.
after_timestampYesWindow start (inclusive). At most 48h before the window end. ISO 8601 UTC, e.g. `2026-08-11T14:30:00Z`.
include_contextNoAdd the per-row `context` block (position/PnL facts for each trade).
before_timestampNoWindow end (inclusive). Omit for now. ISO 8601 UTC, e.g. `2026-08-11T14:30:00Z`.
transaction_typesNo`buy` and/or `sell`. Omit for both.
min_market_cap_usdNoOnly trades in tokens whose market cap at trade time was at least this.
min_days_since_prev_tradeNoOnly 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 on record do not match. Omit for all.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare read-only/non-destructive/open-world; the description adds substantial behavior: cursor pagination protocol, stable paging ('new trades never shift a page'), newest-first sort with `timestamp` then `sequence` tiebreaking, the 48h rejection, null-value semantics, and `quick_flip`/`held_seconds` semantics on SELL rows. This is exactly the beyond-annotation context the dimension rewards.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the sibling differentiation are front-loaded, and the long context-field sentence is genuinely informative rather than filler. The output is dense and near the edge of what one paragraph should carry; a few clauses could be split or trimmed, keeping it just below a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter, cursor-paginated feed tool, the description covers the window constraint, pagination loop, ordering, filtering dimensions, row-level fields, and null behavior. With an output schema present, it appropriately does not restate the return envelope, and nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 92%, so the baseline is 3; the description adds real value by explaining `include_context`'s per-row block field-by-field (pnl_pct_vs_entry, tags, hold_days_at_trade, share_sold_of_position, days_since_prev_trade, wallet_win_rate) and the 'wallets waking up after a quiet spell' interpretation of `min_days_since_prev_trade`. It doesn't restate all filter parameters, but it compensates well where the schema is thin.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names a specific verb+resource+scope ('every tracked-whale buy and sell inside one time window, at most 48 hours') and explicitly contrasts with sibling `get_whalewatch_feed` (one row per swap vs. repeated per list). An agent can distinguish it from the other whalewatch feed tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ('bulk reads such as everything whales did in the last 6 hours'), when not to (the plain feed for non-deduplicated reads), and routes to `get_whale_wallet_track_record(wallet_address)` for wallet quality. It also pre-empts a likely misuse by clarifying this is public market data, not `get_my_*` user data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whalewatch_home_feedWhale feed highlightsA
Read-only
Inspect

The short, curated WhaleWatch feed the Moby app shows on its home screen — the most notable recent whale trades across the whole market, already filtered down. Use it for an open-ended 'what are whales doing right now'. For anything filtered — one token, one wallet, specific lists, a time window, or more than a handful of rows — use get_whalewatch_feed instead. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
limitNoHow many highlighted trades to return.
networkNosolana

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, non-destructive, open-world, so the safety profile is covered; the description adds useful behavioral color — that results are curated/pre-filtered and inherently small, and that the data is public market scope rather than the caller's own wallet. It stops short of describing pagination or freshness/latency, but with an output schema present that gap is minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the identity of the feed, then routing, then the market-vs-user clarification — a sensible priority order. Slightly long for its content, with the final `get_my_` sentence being defensive rather than essential, but every sentence still carries usable signal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, no-required-arg read tool with both annotations and an output schema, the description covers everything an agent needs: what it returns conceptually, when to pick it, what to pick instead, and the market-vs-personal data boundary. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: `limit` is documented in-schema, and `network` is effectively pinned by a `const: solana` with a default, so the undocumented half carries little risk. The description hints that row counts are capped ('more than a handful of rows' → use the other tool), but never states the actual ceiling or what `limit` means against it, so it adds only marginal meaning over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (the curated WhaleWatch home feed of notable whale trades across the whole market) and its scope (short, already filtered). It explicitly distinguishes itself from the nearest sibling, `get_whalewatch_feed`, and from the `get_my_` family, so an agent can place it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit positive trigger (open-ended 'what are whales doing right now') and an explicit exclusion list (one token, one wallet, specific lists, a time window, more than a handful of rows) routed to the named alternative `get_whalewatch_feed`. It also pre-empts a likely mis-selection by stating this is market-wide, not user-portfolio data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whalewatch_kol_feedKOL transaction feedA
Read-only
Inspect

Same feed as get_whalewatch_feed but pre-filtered to KOLs — public, named crypto influencers — rather than anonymous whales. The list filter is applied server-side, so there is no list_ids argument. Use this when the user asks what influencers or 'the callers' are buying. For one KOL's trades, use get_whalewatch_feed with its wallet_address. include_context=true adds a per-row context block: pnl_pct_vs_entry (the trade price vs the wallet's own average entry, as a fraction), tags (what the trade looked like, e.g. profit taking), hold_days_at_trade, share_sold_of_position, position_before_usd, entry_vwap_before, days_since_prev_trade + prev_trade_at (how long the WALLET was quiet before this trade, any token) and wallet_win_rate + wallet_realized_pnl_30d_usd (the wallet's 30-day quality). Unknown values are null — pnl_pct_vs_entry is null whenever the wallet's entry was never seen, days_since_prev_trade when Moby has no earlier trade for the wallet. Wallet quality: use get_whale_wallet_track_record(wallet_address) for a wallet's win rate and PnL. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
pageNo1-based page number.
limitNoTrades per page, 1-100. Keep it small.
networkNosolana
token_addressNoRestrict to KOL trades in this one token.
after_timestampNoOnly trades after this instant. ISO 8601 UTC, e.g. `2026-08-11T14:30:00Z`.
include_contextNoAdd the per-row `context` block (position/PnL facts for each trade).
before_timestampNoOnly trades before this instant. ISO 8601 UTC, e.g. `2026-08-11T14:30:00Z`.
transaction_typesNo`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.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the annotations by detailing exactly what the `context` block entails when `include_context=true` (listing fields like pnl_pct_vs_entry, tags, and wallet quality metrics). It also clarifies the behavior of null values and provides external tool references for deeper metrics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

While the definition is very long, it is highly structured and necessary to convey all the complex constraints (usage, data source, contextual fields, and boundary rules). It prioritizes maximum information delivery over brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It provides full context on the data source (public market data), the scope (KOLs vs. whales), and the limitations (not about user holdings), ensuring the agent understands the data constraints of the feed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is high (88%), the description adds essential meaning: it defines the purpose of `include_context` as adding a specific, complex per-row block, and clarifies that omitting `transaction_types` returns all rows rather than being ignored.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description immediately and clearly differentiates this tool from its main sibling, `get_whalewatch_feed`, by specifying it is pre-filtered to KOLs (public, named influencers) rather than anonymous whales.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit guidance on when to use it ('when the user asks what influencers or 'the callers' are buying') and when not to (when seeking a single KOL's trades, use `get_whalewatch_feed` with `wallet_address`). It also draws a critical line between public market data and the user's own private data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whalewatch_legendWhale feed legendA
Read-only
Inspect

The key explaining the icons and badges attached to rows in the WhaleWatch feeds. Static reference data — call it once if you need to explain what a marker on a feed row means, and do not poll it. It contains no market data and no wallets. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only and non-destructive, and the description adds genuinely useful behavioral context: static data, call once, no polling, no market or wallet data. The only nit is a faint tension between "static reference data" and idempotentHint=false, but that is a minor mismatch rather than a contradiction of what the tool does.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core definition and the call-once instruction come first, which is correct front-loading. The two closing sentences about public market data and the get_my_ prefix are somewhat repetitive, but they earn their place by preventing wallet-data misselection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. For a zero-parameter, read-only reference endpoint, the description covers purpose, usage cadence, and scope boundaries completely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters the baseline is 4. The description reinforces that no arguments are needed by stating what the tool does and does not contain, though it adds no per-parameter detail because there is none to add.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

It names a specific resource (the legend/key for icons and badges on WhaleWatch feed rows) and explicitly bounds its contents (no market data, no wallets). That makes it trivially distinguishable from data-returning siblings like get_whalewatch_feed or get_token_overview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Call it once if you need to explain what a marker on a feed row means, and do not poll it" gives both the trigger condition and an explicit prohibition. It also routes the agent away from it for wallet-scoped needs by naming the get_my_ prefix convention as the alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whalewatch_listsWhale listsA
Read-only
Inspect

The tracked-wallet lists Moby maintains (whale groups, KOL groups, proven-trader cohorts). Call this to discover valid list_ids for get_whalewatch_feed. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so safety is covered. The description adds meaningful context beyond annotations: it is public market-wide data, explicitly not user-specific. It does not mention rate limits or freshness, but the key behavioral scope is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: what the lists are, when to call it, and scope clarification. The primary purpose is front-loaded and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained, and annotations cover safety. The description covers purpose, usage, and scope. The only minor gap is the unmentioned `network` parameter, though its constant 'solana' value makes it low-risk.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter (`network`) with 0% schema description coverage, and the description says nothing about it. The schema's const/default of 'solana' makes the parameter effectively trivial, but the description does not compensate for the missing semantics. Baseline 3 is appropriate given the trivial constant parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource precisely: 'tracked-wallet lists Moby maintains (whale groups, KOL groups, proven-trader cohorts)' and states the purpose of discovering valid `list_ids`. It clearly separates itself from `get_my_` tools but does not explicitly distinguish itself from the similarly named sibling `get_whalewatch_wallet_lists`, leaving a small ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit when-to-use: 'Call this to discover valid `list_ids` for `get_whalewatch_feed`.' It also gives a when-not-to-use by clarifying this is public market data about the whole market and not the user's own wallet, and directs the agent to `get_my_` tools for personal data. This is exactly the routing guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whalewatch_wallet_list_detailOne find-wallets listA
Read-only
Inspect

One curated wallet list's rows, pre-ranked. slug MUST come from get_whalewatch_wallet_lists — an invented or stale slug is a 404, not an empty list. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
slugYesList slug from get_whalewatch_wallet_lists.
networkNosolana

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, non-destructive, open-world. Beyond that, the description adds real behavioral facts: bad slugs fail with a 404 rather than empty results, and rows arrive pre-ranked. It does not describe pagination or result size, but the output schema exists to cover return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what is returned, then the slug precondition, then the user-vs-market disambiguation. No filler; each sentence carries a distinct decision-relevant fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, two-parameter read tool with annotations and an output schema, the description covers the two things that would actually cause a wrong call — an invented slug and confusing public market data with the user's own holdings. Return-value detail is correctly delegated to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%; slug is documented in the schema and the description reinforces its provenance and failure mode. The network parameter is undocumented in both places, though its const/default ('solana') makes it near-zero risk. Adds meaning for slug but does not fully compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and scope: the rows of one curated wallet list, pre-ranked. That is distinct from the sibling get_whalewatch_wallet_lists, which returns the lists themselves, and the description reinforces that dependency rather than restating the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit precondition ('slug MUST come from get_whalewatch_wallet_lists') with the failure mode if violated (a 404, not an empty list). It also names the alternative family ('get_my_' tools) and the condition that selects them — user's own data vs. whole-market public data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_whalewatch_wallet_listsFind-wallets shellA
Read-only
Inspect

The Find-wallets tab shell: a manual 'picks' strip, then one summary per curated wallet list that has rows on this chain (whale groups, KOL groups, proven-trader cohorts). Call this first to learn the valid slug values for get_whalewatch_wallet_list_detail. NOT the same lists as get_whalewatch_lists — that one is for filtering get_whalewatch_feed; this one is for browsing wallets to follow. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
networkNosolana

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, openWorld, and non-destructive, so the safety bar is met structurally; the description adds that this is public whole-market data, not the user's own wallet or holdings, which is real routing context. It stops short of describing the picks summary contents or pagination, but the output schema covers returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and the 'call this first' instruction are front-loaded, and the negative disambiguation sentences each prevent a distinct error. It runs a bit long on the get_my_ clarification, but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover safety. What remains — role in the navigation flow, sibling routing, and the public-vs-personal data boundary — is fully stated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter exists and the schema pins it to const 'solana' with a default, so no semantic elaboration is needed. The description never mentions the network argument, but that argument is self-documenting; the 0% coverage score is misleading here because the schema entry is a constant.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a concrete picture of the resource — a shell with a manual picks strip plus one summary per curated list (whale groups, KOL groups, proven-trader cohorts) — and explicitly blocks two misreads by naming get_whalewatch_lists and the get_my_ family. An agent can distinguish it from 'discover_wallets_to_follow' and 'get_whalewatch_wallet_list_detail' without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states an explicit ordering rule ('Call this first to learn the valid slug values for get_whalewatch_wallet_list_detail') and names the alternative with the condition that rules it out ('NOT the same lists as get_whalewatch_lists … that one is for filtering get_whalewatch_feed'). It also rules out the user-scoped tools via the get_my_ convention.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_strategiesStarter strategiesA
Read-only
Inspect

The starter strategies 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 already 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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, open-world, non-destructive behavior. The description adds meaningful context beyond that: user-specific max per trade is pre-filled, app_links are deep links that open the Moby app, and the full strategy prompt is deliberately absent and must be fetched via get_strategy.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with what the tool returns and then moves into usage guidance. It is dense and somewhat long, but nearly every sentence carries actionable information for recommendation behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still names the key returned fields and explains how to use them. It also covers the critical missing piece, the full prompt, by routing the agent to get_strategy.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there are no parameter semantics to explain. The baseline for a zero-parameter tool is 4, and the description does not need to compensate for missing schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: lists starter strategy cards from the Strategies section, with the exact fields returned. It explicitly distinguishes itself from get_strategy by saying the full prompt is not here and must be fetched separately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit timing (during or after onboarding, when the user asks what strategies exist), a concrete recommendation workflow using recommended_strategies from the trading profile, category-to-card mappings, and a guardrail to recommend only returned cards.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quick_buyQuick buy a tokenA
Destructive
Inspect

Buy a token in one step, without a separate quote. ⚠️ THIS SPENDS REAL MONEY. It submits a real transaction from the user's wallet using real funds and cannot be undone. Confirm the exact amount, token and network with the user in plain language, and get their explicit go-ahead, BEFORE calling this. Because there is no quote step, the user does not get to see a price before committing — so confirm the token AND the amount in words first, and prefer get_swap_quote + execute_swap whenever the user might want to see the price. Give exactly one of amount_usd or amount_in, never both. Verify the contract address came from search_tokens; buying an impostor token is unrecoverable.

Response includes quote_id; when fill_pending is true, call get_swap_status(request_id=quote_id).

AMOUNTS: read the _ui fields (whole tokens) when talking to the user — the un-suffixed output_amount / minimum_output_amount / filled_*_amount are in the token's SMALLEST unit. A null amount is unknown, never zero: fill_pending: true means the trade was submitted but its fill is not booked yet — say so, and read the received amount from get_swap_status rather than guessing it.

Moby attaches no exits: place this position's TP/SL yourself with create_order.

NameRequiredDescriptionDefault
networkNosolana
amount_inNoHow 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`.
rationaleNoOptional. 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.
amount_usdNoHow much to spend in US DOLLARS. Mutually exclusive with `amount_in`.
output_tokenYesContract address of the token to BUY. Get it from `search_tokens`.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true and non-idempotent, but the description adds the details that matter: real funds are spent, it is irreversible, the user never sees a price because there is no quote step, and buying an impostor contract address is unrecoverable. It also discloses the `fill_pending` state and that a null amount means unknown, not zero.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the irreversible-spend warning, then alternatives, then amount conventions — a sensible priority order. It runs long and the AMOUNTS section partly restates what an output schema could carry, but almost every line is load-bearing guidance for a money-moving call.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, one-shot purchase with an output schema, the description covers the confirmation gate, the sourcing of the token address, the amount convention split (`_ui` vs smallest unit), the null/fill_pending ambiguity, and the missing-exits gotcha. Nothing an agent needs to avoid a harmful call is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80% and already documents both amount fields and the USDC-only funding rule, so the mutual-exclusivity restatement adds little. The description does add real value by insisting the contract address originate from `search_tokens`, warning about impostor tokens, and clarifying that SOL is a position rather than a spendable balance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Buy a token in one step, without a separate quote') and immediately distinguishes itself from the get_swap_quote + execute_swap path named later in the same paragraph. An agent can tell exactly what this tool does and how it differs from its closest sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: prefer `get_swap_quote` + `execute_swap` whenever the user might want to see the price, and confirm token/amount/network plus explicit go-ahead before calling. It also names a downstream follow-up (`get_swap_status(request_id=quote_id)` when `fill_pending` is true) and a post-trade obligation (`create_order` for TP/SL).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quick_sellQuick sell a positionA
Destructive
Inspect

Sell a token the user holds, in ONE step, at market — quote and execute happen together on the server, so it never fails on an expired quote while you wait for the user. This is THE tool to close or trim a position. ⚠️ THIS SPENDS REAL MONEY. It submits a real transaction from the user's wallet using real funds and cannot be undone. Confirm the exact amount, token and network with the user in plain language, and get their explicit go-ahead, BEFORE calling this. Confirm the token and how much (pct of the position, default 100 = sell it all) in words first.

Sizing: pct is a percent of the CURRENT on-chain balance (the get_my_token_balance number); omit it to sell everything. Proceeds land in USDC in the same agent wallet — output_token names it. Response: sold_amount (token units submitted), pct, status, transaction_signature, the expected proceeds (quoted_output_amount_ui, at least minimum_output_amount_ui), slippage_bps, and the received amount (filled_output_amount_ui) once booked. Response includes quote_id; when fill_pending is true, call get_swap_status(request_id=quote_id). AMOUNTS: read the _ui fields (whole tokens) when talking to the user — the un-suffixed output_amount / minimum_output_amount / filled_*_amount are in the token's SMALLEST unit. A null amount is unknown, never zero: fill_pending: true means the trade was submitted but its fill is not booked yet — say so, and read the received amount from get_swap_status rather than guessing it.

Selling the whole position also cancels EVERY resting TP/SL order on that token (all lots) in the same call: cancelled_order_ids lists them, cancel_failed_order_ids / cancel_pending_order_ids (+ cancel_note) any not cancelled yet, which Moby keeps retrying. A partial sell leaves them (those fields are null). A sell is never blocked by market cap, safety rating or the trade limits (and does not use up the daily volume), but the market order-type switch applies (a refusal comes back as {blocked: true, reason, ...}).

NameRequiredDescriptionDefault
pctNoPercent of the current balance to sell, 1-100. Default 100 = close it.
networkNosolana
token_addressYesContract address of the HELD token to sell. Get it from `get_my_balances`.
max_slippage_bpsNoSlippage tolerance in basis points (100 = 1%). Omit for Moby's default.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive/non-idempotent/open-world, but the description adds substantial context: real funds, irreversible, mandatory user confirmation, whole-position sells cancel every resting TP/SL order (with the cancelled_order_ids / cancel_failed_order_ids reporting shape), sells bypass market-cap/safety/daily-volume limits, and refusals come back as {blocked, reason}. This is well beyond what the annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then the money warning, then sizing — good ordering with almost no filler. It is long, however, and spends several sentences enumerating response fields that the output schema already defines, which is mild redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent money-moving tool it covers everything an agent needs: confirmation protocol, sizing source, async fill handling, unit ambiguity (_ui vs smallest unit), null-amount semantics, and side effects on resting orders.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 75% schema coverage the baseline would be 3-4, but the description adds meaning the schema does not: pct is a percent of the CURRENT on-chain balance tied to get_my_token_balance, omission sells everything, token_address is the HELD token sourced from get_my_balances, and proceeds settle in USDC via output_token.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Sell a token the user holds') plus the key differentiator: quote and execute happen together on the server in ONE step. That phrasing separates it from the sibling quote/execute pair (get_swap_quote, execute_swap) without the agent opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when to reach for it ('THE tool to close or trim a position'), that it must confirm amount/token/network and get explicit go-ahead first, and what to do after (call get_swap_status when fill_pending is true). Partial vs. full sell side effects are also spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_active_strategyRecord a running strategyAInspect

Record what you run, so other sessions and clients see it.

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

NameRequiredDescriptionDefault
nameNoDisplay name (max 120 chars).
notesNoAnything to remember (max 1000 chars).
statusNoactive, paused or stopped.
scheduleNoHow often it runs, in plain words (max 120 chars).
settingsNoThe confirmed numbers as a small JSON object (max 8 KB); `{}` clears it.
last_run_atNoISO 8601 time of the run just finished, e.g. `2026-10-29T14:00:00Z`.
strategy_idNoThe starter card `id` from list_strategies; omit for a custom strategy.
active_strategy_idNoOmit to start a new one; an `id` from get_my_active_strategies to update.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a non-read, non-idempotent, non-destructive write; the description adds what annotations cannot: no money moves and no guardrail changes, entries are visible to other sessions/clients, and empty values clear settings/schedule/notes (a real destructive side effect the annotations do not capture). The per-user cap of 20 active/paused is disclosed up front rather than as a runtime error.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One orienting sentence followed by mode-labelled bullets, each carrying a distinct parameter recipe. No restatement of the name or title, no filler; the constraint and safety statements are placed at the end where they close the loop.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter multi-mode upsert tool, everything an agent needs before calling is present: mode selection, required combinations, id sources, clearing semantics, quota, and side-effect scope. Return values need not be described because an output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3, but the description adds mode-conditional semantics the schema cannot express: which parameter combination is valid for each operation, that name defaults from the starter card, what belongs in settings (amounts, mix, exits, ask-first flag), that schedule is plain words, and that last_run_at is ISO 8601. This is meaning beyond the flat field list.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Record what you run") plus the reason (other sessions and clients see it), and immediately decomposes the tool into its five operating modes (START / PAUSE-RESUME-STOP / EDIT / HEARTBEAT). Sibling read tools (list_strategies, get_my_active_strategies) are named as the source of ids, so an agent can tell this is the write-side counterpart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use rules per mode: omit active_strategy_id to start, pass it to pause/resume/stop/edit/heartbeat, and pass only changed fields on edit. It also names the alternative sources of ids and the capacity constraint ("At most 20 active or paused per user; stop one to start another"), which is the exclusion an agent actually needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_trading_profileSave my trading profileA
Idempotent
Inspect

Save the user's interview answers, or record that they skipped. 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.

NameRequiredDescriptionDefault
profileNo
replaceNoFalse merges into the saved answers; true overwrites them.
skippedNoTrue when the user declined the interview.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is not read-only, not destructive, and idempotent; the description adds important behavior beyond that: merge versus overwrite semantics, USD conversion, post-save recommendation handling, and that scan schedules are not saved here. It also explicitly says no guardrail is changed and no money moves, with no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core call condition is front-loaded, followed by tightly scoped bullets for replace behavior, currency conversion, post-save follow-up, and scan schedule handling. Despite its length, every section earns its place by preventing a likely invocation error or follow-through mistake.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a complex nested profile schema and an output schema, and the description covers the important missing context: when to call, mutation semantics, currency conversion, post-save result handling, and the absence of a scan schedule field. An agent has enough information to invoke and follow through correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the description meaningfully supplements it by making `profile` and `skipped` mutually exclusive, clarifying `replace` merge behavior, specifying USD amounts and SOL conversion, and noting that scan schedule has no field here. These are operational details not fully captured by the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: save the user's interview answers or record that they skipped. The two call modes are clear, but it does not explicitly name sibling tools such as get_my_trading_profile or save_active_strategy, so sibling differentiation is implicit rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives exact timing and preconditions: call after playing answers back in TWO lines and the user says yes, or use `skipped: true` when they decline. It also states mutual exclusivity for `profile` vs `skipped` and explains `replace: false` for updates versus `replace: true` for overwrite.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_tokensSearch tokensA
Read-only
Inspect

Find tokens by name, symbol or contract address. Use this FIRST whenever the user names a token in words ('buy some BONK') — every other token tool needs a contract address, and searching is the only safe way to get one. Never guess a contract address: on-chain there are many impostor tokens sharing a popular symbol, and picking the wrong one loses the user's money. If several results look plausible, show them to the user and ask which they mean. asset_class: tokenized_stock marks tokenized equities (treat as stock proxies, not memecoins). safety_tier: green = verified; grey = usually fine (not scored yet or a young launchpad token, NOT a red flag — do not skip a coin for being grey); red = caution / DYOR, the only tier to treat as a warning (Moby refuses agent buys on red). This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
queryYes
networkNosolana

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/destructive=false, and the description adds substantial context beyond them: impostor-token risk, safety_tier semantics (green/grey/red), and that red tiers block agent buys. It also disambiguates public market data from user-wallet data. Minor gap: no explicit note on result count/pagination, but strong overall.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the primary action and directive ('Use this FIRST'), then layers tier semantics. Dense but every sentence is informative; slightly long, but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so return values needn't be described; annotations cover safety. The description fills the important gaps—tier meanings, asset_class, and public-vs-wallet scope—making it complete for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning. It clarifies what 'query' accepts (name, symbol, or contract address), which is the key semantic. The 'network' param (const solana) is not addressed, but its const/default makes it largely self-evident.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: find tokens by name, symbol, or contract address. It clearly distinguishes itself from the many get_token_* siblings by positioning search as the address-resolution step those tools depend on.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('Use this FIRST whenever the user names a token in words'), names the alternative class ('every other token tool needs a contract address'), and gives disambiguation procedure ('if several results look plausible, show them and ask'). Also warns against the failure mode of guessing addresses.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_whalewatch_walletsSearch wallets by name or brandA
Read-only
Inspect

Find PUBLIC whale/KOL/trader wallets by a KOL name or a whale-list brand — NOT by pasted address, and NOT the same search as search_tokens. Use discover_wallets_to_follow if you also want to know which of the results the caller already follows. This is public market data about the whole market — it is NOT about the user's own wallet or holdings. Tools whose names start with get_my_ are the ones that return the user's own data.

NameRequiredDescriptionDefault
queryYesA KOL name or a whale-list brand. Minimum 2 characters.
networkNosolana

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the safety profile (readOnly, non-destructive, openWorld, non-idempotent), and the description adds substantive context: results are public market-wide data, not the caller's portfolio. It does not discuss result caps, pagination, or ranking behaviour, but with an output schema present those gaps are modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and the primary exclusion, then layers the sibling alternatives. Slightly repetitive in restating the public-vs-personal split across two sentences, but every sentence carries disambiguation value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with rich annotations and an output schema, the description covers purpose, exclusions, and alternatives thoroughly. Only minor omissions remain — no mention of result volume or how KOL/brand matches are ranked.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%; `query` is documented in-schema while `network` is a fixed const with a default. The description adds a real constraint the schema lacks — that a pasted address is not a valid query — and reinforces the accepted input kinds. It says nothing about the `network` parameter, but that parameter is fully pinned by `const: solana`.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Find PUBLIC whale/KOL/trader wallets') and pins the two lookup keys (KOL name, whale-list brand). It explicitly distinguishes itself from `search_tokens` and from `get_my_*` tools, so an agent can route correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear when-not conditions ('NOT by pasted address', 'NOT the same search as search_tokens') and names the alternative for a related intent (`discover_wallets_to_follow` when follow status is also wanted). The scope boundary between public market data and the caller's own data is stated outright.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_feedbackSend feedback to MobyA
Idempotent
Inspect

Log a bug, a wrong number (data_issue, name the tool) or an idea to improve Moby, 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.

NameRequiredDescriptionDefault
kindYesbug, data_issue or idea.
titleYesOne line (max 160 chars).
actualNoWhat Moby returned (max 500 chars).
detailsYesWhat happened or what to add (max 2000 chars).
expectedNoWhat the number should be, and where you saw it (max 500 chars).
tool_nameNoThe Moby tool it is about, e.g. `get_token_overview`. Required for data_issue.
token_addressNoThe token's contract address, when it is about one token.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, and the description earns credit by explaining *why* it is idempotent: same title within 24 hours returns the earlier submission rather than creating a new one. It also adds the daily quota and the instruction to report the returned id back to the user. What it omits is any mention of what a rejected or rate-limited call looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and exclusions are front-loaded, then parameter guidance, then limits — a sensible ordering with no filler sentences. It is dense to the point of being cramped (backticked field names, three ideas per sentence), so scanning takes effort, but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter write tool with an output schema, the description covers routing, per-kind semantics, size limits, duplicate behavior and daily quota. The return shape is already documented by the output schema, so nothing an agent needs to call this correctly or explain the outcome to a user is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description goes further by defining the enum values in behavioral terms (bug = something broke, idea = a missing tool or 'they should add X') and by flagging that tool_name is required specifically for data_issue while expected/actual only 'help'. That conditional relationship is the kind of cross-parameter guidance a flat schema cannot express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb (log) and resource (bug / data_issue / idea for Moby) and explicitly demarcates the boundary from out-of-scope subjects (payments, lost funds, account problems). It is clearly distinguishable from the retrieval sibling get_my_feedback and from transactional siblings like create_order or execute_swap.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use criteria per kind, a when-not-to-use rule that redirects to in-app support, a once-per-issue directive, and a fallback path for duplicates (returns the earlier submission with duplicate:true). The rate ceiling of 10/day tells the agent when the call will stop being available at all.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unfollow_walletUnfollow a walletA
Idempotent
Inspect

Unfollow a wallet. Idempotent — a no-op if the caller does not follow it. Also clears the caller's Following-feed history for this wallet, so get_my_following_feed reflects the change immediately. Moves no money.

NameRequiredDescriptionDefault
networkNosolana
wallet_addressYesPublic wallet ref, as returned by get_my_followed_wallets.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-readonly, idempotent, non-destructive, but the description adds a genuinely non-obvious side effect: the caller's Following-feed history for this wallet is cleared so get_my_following_feed reflects the change immediately. "Moves no money" also pre-empts a reasonable agent worry on a trading platform. This is disclosure beyond structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each carrying distinct information: the action, the idempotency guarantee, the feed-history side effect, and the no-funds reassurance. Front-loaded and free of repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the two-parameter surface is simple. The description covers the state-change semantics and side effects an agent needs to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: wallet_address is documented as coming from get_my_followed_wallets, while network is a fixed const with a default and needs no prose. The description adds no parameter meaning of its own, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Unfollow a wallet") that cleanly pairs with the sibling follow_wallet, so an agent can pick between them without opening either schema. The scope of the action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The idempotency clause ("a no-op if the caller does not follow it") tells the agent it can call this defensively without checking state first. It never names follow_wallet as the inverse or states prerequisites, so it stops short of explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 77 tool updates
    • First observedcancel_order
    • First observedcreate_order
    • First observeddiscover_wallets_to_follow
    • First observedexecute_swap
    • First observedfollow_wallet
    • First observedget_degen_leaderboard
    • First observedget_group_leaderboard
    • First observedget_kol_top_held
    • First observedget_launchpads
    • First observedget_market_movers
    • First observedget_my_active_strategies
    • First observedget_my_activity
    • First observedget_my_balances
    • First observedget_my_closed_positions
    • First observedget_my_closed_trades
    • First observedget_my_dca_schedules
    • First observedget_my_feedback
    • First observedget_my_followed_wallets
    • First observedget_my_following_feed
    • First observedget_my_guardrails
    • First observedget_my_orders
    • First observedget_my_portfolio
    • First observedget_my_position
    • First observedget_my_recommended_wallets
    • First observedget_my_token_balance
    • First observedget_my_trading_profile
    • First observedget_my_transaction
    • First observedget_my_transactions
    • First observedget_my_wallets
    • First observedget_my_watchlist_tokens
    • First observedget_my_watchlists
    • First observedget_screener_event_filters
    • First observedget_screener_groups
    • First observedget_screener_leaderboard
    • First observedget_smart_money_pulse
    • First observedget_strategy
    • First observedget_swap_quote
    • First observedget_swap_status
    • First observedget_token_chart
    • First observedget_token_dca_orders
    • First observedget_token_holders
    • First observedget_token_holdings
    • First observedget_token_key_holders
    • First observedget_token_live_feed
    • First observedget_token_ohlcv
    • First observedget_token_overview
    • First observedget_token_price
    • First observedget_token_risk_signals
    • First observedget_token_smart_money
    • First observedget_token_trade_brief
    • First observedget_token_whale_holders
    • First observedget_token_x_profile
    • First observedget_top_held
    • First observedget_whale_wallet_holdings
    • First observedget_whale_wallet_pnl_chart
    • First observedget_whale_wallet_positions
    • First observedget_whale_wallet_profile
    • First observedget_whale_wallet_profiles
    • First observedget_whale_wallet_track_record
    • First observedget_whale_wallet_wins
    • First observedget_whalewatch_feed
    • First observedget_whalewatch_feed_window
    • First observedget_whalewatch_home_feed
    • First observedget_whalewatch_kol_feed
    • First observedget_whalewatch_legend
    • First observedget_whalewatch_lists
    • First observedget_whalewatch_wallet_list_detail
    • First observedget_whalewatch_wallet_lists
    • First observedlist_strategies
    • First observedquick_buy
    • First observedquick_sell
    • First observedsave_active_strategy
    • First observedsave_trading_profile
    • First observedsearch_tokens
    • First observedsearch_whalewatch_wallets
    • First observedsubmit_feedback
    • First observedunfollow_wallet

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables policy-checked Solana wallet actions with user-set limits, simulation, unsigned transaction preparation, and receipts, allowing users to delegate operations while retaining signing control.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables agents to screen Solana tokens, triage swaps before signing, and generate optimized unsigned swap transactions with payment and budget controls through MCP tools.
    145 npm
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources