Alpaca Trading API integration for Model Context Protocol (MCP)
MangroveAI is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Guardrails for trading agents. Built-in risk management, 100+ tools for strategy R&D, 12+ venues.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http mangroveai-mcp https://api.mangrovedeveloper.ai/mcp/
# 2 — ask your agent for something these tools do
# delete_strategy, get_trades_for_strategy, list_positions and 82 more
MangroveAI costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http mangroveai-mcp https://api.mangrovedeveloper.ai/mcp/Reconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
85 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Archive a stopped strategy that has no open positions. Strategies are never hard-deleted: this hides the strategy from the default lists and keeps the strategy and its backtests, and it can be restored with POST /strategies/{id}/unarchive. Use this only when the user explicitly asks to delete or remove a strategy, and say that it was archived, not erased. Always confirm the strategy name and ID fi
| Parameter | Type | Required | Notes |
|---|---|---|---|
| strategy_id | string | yes | — |
Get trade records for a specific strategy by its ID. Use this when the user asks about trades or performance for a particular named strategy.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | integer | no | — |
| strategy_id | string | yes | — |
List open (or all) positions for the current user. Optionally filter by strategy ID or asset. Use this when the user asks about their current positions, open trades, or what they are currently holding.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| asset | string | no | — |
| limit | integer | no | — |
| open_only | boolean | no | — |
| strategy_id | string | no | — |
Evaluate a strategy against current live market data to check if entry or exit signals are active. It places no orders and opens no positions, but each call records the evaluation: it updates the strategy's last_evaluated_at and evaluation_count and adds an agent_evaluations audit row. Returns the current asset price and any order intents the signals would produce. Use this when the user asks whet
| Parameter | Type | Required | Notes |
|---|---|---|---|
| strategy_id | string | yes | — |
Bar-by-bar decision log for a strategy — every time the agent checked signals for this strategy. Returns per-evaluation market snapshot, signal decisions, order intents generated, and whether the evaluation succeeded or errored. Use this when the user asks 'what did the agent decide', 'why did it not trade', 'show me the agent evaluation history', or 'when did the agent last check this strategy'.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | integer | no | — |
| offset | integer | no | — |
| strategy_id | string | yes | — |
Run the Strategy Engine route in one call. Use it FIRST whenever someone asks to build or make a strategy and names no signals -- 'build me a strategy', 'build me a BTC strategy on 1h', 'make me something for ETH'. Give the asset, and the candle size only when they named one. The server reads the 180-day regime, searches the engine's completed runs once with the agreed floors (more than 10 trades,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| asset | string | yes | Asset symbol, e.g. BTC or ETH. |
| candle_size | string | no | Duration of one candle, e.g. 1h or 1d. |
Classify one stretch of market: a date range, or a catalog window by file name. Explicit date ranges require daily (1d) candles; catalog windows retain their stored interval. Returns its direction band, volatility band, trend character and the three features behind them, using the same labels the sweep catalog carries. Use it for a period the person names, or to see what a window a sweep selected
| Parameter | Type | Required | Notes |
|---|---|---|---|
| asset | string | no | Asset symbol, e.g. BTC or ETH. |
| candle_size | string | no | Duration of one candle, e.g. 1h or 1d. |
| end_date | string | no | ISO end of the window. |
| market_data_venue | string | no | Exact venue of the requested market. |
| provider | string | no | Optional upstream override; omitted uses the existing server default. |
| quote_token | string | no | Quote currency of the requested market. |
| start_date | string | no | ISO start of the window, e.g. 2026-01-01. |
| window_file | string | no | A catalog window's file name, classified as it stands. Supply this or the asset with both dates, not both. |
Create the search, once the person has agreed to its size. The engine builds every candidate strategy itself out of the pool you give it -- the whole signal library unless narrowed by class or by naming signals -- and draws the parameters too. USE size_sweep FIRST and say the run count it reports: this call creates a draft and validates it, and a person who has not heard a total has not agreed to
| Parameter | Type | Required | Notes |
|---|---|---|---|
| assets | array | no | Asset symbols, e.g. ["BTC", "ETH"]. |
| candidate_shape | object | no | How many parts a drawn strategy gets, any of n_entry_triggers, min_entry_filters, max_entry_filters, min_exit_triggers, max_exit_triggers, min_exit_filters, max_exit_filters. Omitted, the platform def |
| candle_sizes | array | no | Candle sizes, e.g. ["1h"]. Omitted, every size Oracle holds for those assets, which multiplies the windows. |
| categories | array | no | Draw only from these signal classes, e.g. ["momentum"]. The classes are averaging, flow, momentum, oscillator, pattern and volatility. Omitted, the whole library. |
| draws_per_dataset | integer | no | How many candidate strategies to draw PER WINDOW. The runs that execute are this multiplied by the number of windows. |
| entry_filters | array | no | Draw entry filters only from these. Omitted, every filter. |
| entry_triggers | array | no | Draw the entry trigger only from these signals, named as the knowledge graph registers them. Omitted, every trigger. |
| execution_base | object | no | Risk settings every run shares, from the execution config schema. Omitted, platform canon. |
| execution_sweeps | object | no | Execution parameters to search too, each {param: {min, max, n}}. Every one of these multiplies the run count. |
| exit_filters | array | no | Draw exit filters only from these. |
| exit_triggers | array | no | Draw an exit trigger only from these. Omitted, no exit signal is drawn at all and runs exit on the risk settings. |
| include_gapped | boolean | no | Include windows missing bars. Off by default, because a metric over a half-covered window is not comparable to one over a whole window. |
| max_total_runs | integer | no | A ceiling on the executed runs, applied by Oracle. |
| param_samples | integer | no | How many values each signal parameter contributes. The space is their product, so this is the dial that decides whether the search explores parameters at all; at 1 every candidate runs at a single set |
| pre_filter_threshold | number | no | Skip a drawn candidate the SIEVE model predicts will not trade at all, above this confidence. A will-it-trade gate and nothing about whether it will make money. Omitted, no skipping. |
| regimes | array | no | Market conditions to keep: current, bear, neutral, bull. current means data within the last 30 days, which is recency and not direction. Omitted, every condition. |
| signal_groups | array | no | Keep kinds of signal apart. A candidate draws ALL of its signals from ONE group, so two signals in different groups never appear on the same strategy. Runs are split across the groups. |
| sweep_name | string | yes | What to call it. |
| windows | array | no | Specific window files to include whatever else is chosen. |
Evaluate chart data and optional signal triggers over a specific range. [Access: pay 0.05 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chart_timeframe | string | no | Live chart timeframe; dataset mode uses its bundled timeframe |
| dataset_key | string | no | Bundled dataset key; replaces symbol and date range |
| end_date | string | no | Live-mode chart end timestamp; required unless dataset_key is provided |
| market_data_venue | string | no | Live-data exchange; supply with quote_token |
| provider | string | no | Explicit external history provider |
| quote_token | string | no | Live-data quote; supply with market_data_venue |
| signals | array | no | Up to 20 registered signals to evaluate |
| start_date | string | no | Live-mode chart start timestamp; required unless dataset_key is provided |
| symbol | string | no | Live-mode asset symbol; required unless dataset_key is provided |
Evaluate a signal against provided market data and parameters. [Access: pay 0.02 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
| Parameter | Type | Required | Notes |
|---|---|---|---|
| market_data | array | yes | — |
| parameters | object | no | — |
| signal_name | string | yes | Signal name |
Runs from one sweep, or from every sweep this person has, filtered and sorted by the engine. LEAVE experiment_id OUT to search them all, which is how a person asking whether they have already found something like this gets an answer without spending a new search on a question that already has one. A SWEEP HAS NO WINNER: which run matters depends entirely on what was being asked, so you choose sort
| Parameter | Type | Required | Notes |
|---|---|---|---|
| asset | string | no | Asset symbol, e.g. BTC or ETH. |
| atr_period | integer | no | Only runs that used this ATR period. Needs experiment_id. |
| beats_benchmarks | boolean | no | Only runs that beat all three benchmarks over the same |
| beats_crypto_benchmarks | boolean | no | Only runs that beat the crypto benchmarks rather than only their own asset. |
| candle_size | string | no | Duration of one candle, e.g. 1h or 1d. |
| cooldown_bars | integer | no | Only runs that used this cooldown. Needs experiment_id. |
| covering | string | no | Only runs over windows covering this single date, as YYYY-MM-DD. A different question from a span. |
| covering_from | string | no | Only runs whose window OVERLAPS this date onwards. A run is relevant to 2024 if any of it happened in 2024. |
| covering_to | string | no | Only runs whose window overlaps up to this date. |
| experiment_id | string | no | The sweep, as create_sweep returned it. |
| generation | string | no | Only runs from this engine generation, so runs made under different engine behaviour are not compared as though alike. |
| limit | integer | no | Maximum results. |
| market_direction | string | no | Only runs from windows of this market character, e.g. bear or mega_bull. Several are one comma-separated string, e.g. "bull,super_bull", and a run matching any of them counts. What a run did in one ki |
| max_delta_vs_asset | number | no | Only runs beating their own asset by at most this much. |
| max_delta_vs_benchmark | number | no | Only runs beating their benchmark by at most this much, so "between 3 and 8" is one question rather than a page fetched and thrown away. |
| max_irr | number | no | Only runs at or below this annualised IRR. |
| max_return | number | no | Only runs at or below this total return. |
| max_risk_per_trade | number | no | Only runs that risked this fraction per trade. Needs experiment_id. |
| max_sharpe | number | no | Only runs at or below this Sharpe ratio. |
| max_trades | integer | no | Only runs at or below this trade count. Pairs with min_trades to ask for a band rather than a floor. |
Full metadata and risk profile for one crypto asset on the Mangrove platform: approval status, risk score breakdown, regulatory status and identifiers. Use it when the user asks about a specific asset's approval or risk detail rather than a live price. [Access: pay 0.001 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients
| Parameter | Type | Required | Notes |
|---|---|---|---|
| symbol | string | yes | Asset symbol, e.g. BTC or ETH. |
Fetch a backtest that already ran, by id, with the execution config it used. Use it instead of run_backtest whenever the user refers to a previous result, or to compare two runs -- re-running costs them a unit of their allowance and a stored run is the record of what actually happened. [Access: pay 0.001 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable cli
| Parameter | Type | Required | Notes |
|---|---|---|---|
| backtest_id | string | yes | The run's UUID, as run_backtest returned it. |
The individual trades a backtest made -- entry and exit prices and times, profit or loss, and why each one closed. Use it when the user asks what a backtest actually traded; get_backtest has the summary metrics. THESE ARE SIMULATED TRADES from a backtest, not real ones -- list_trades has those. A long run is paged: pass offset to read on. [Access: pay 0.001 USDC via x402 (PAYMENT-SIGNATURE header
| Parameter | Type | Required | Notes |
|---|---|---|---|
| backtest_id | string | yes | The run's UUID, as run_backtest returned it. |
| limit | integer | no | Maximum results. |
| offset | integer | no | Pagination offset in the result units documented by the tool; zero starts the first page. |
Buy-and-hold return for an asset between two dates, as a percentage. Use it whenever you state what a strategy returned: a return with nothing to compare it against does not answer whether the strategy was worth running. run_backtest already includes this for its own window, so call this for a different asset or a different period. A YYYY-MM-DD end date includes that completed UTC day; an exact en
| Parameter | Type | Required | Notes |
|---|---|---|---|
| asset | string | yes | Asset symbol, e.g. BTC or ETH. |
| base_token | string | no | Canonical base token; supply with quote_token and market_data_venue. |
| end_date | string | yes | ISO end of the window. |
| market_data_venue | string | no | Exact venue of the requested market. |
| quote_token | string | no | Quote currency of the requested market. |
| start_date | string | yes | ISO start of the window, e.g. 2026-01-01. |
Total Value Locked for a whole blockchain such as Ethereum, Base or Solana. Returns USD TVL and the top protocols on that chain. Use it when the user asks about a chain's overall DeFi footprint. [Access: pay 0.01 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain | string | yes | Chain name or slug, e.g. ethereum or base. |
Crypto ETF net flows -- institutional inflows and outflows for spot BTC and ETH ETFs. Persistent net inflows are a bullish tape signal; heavy outflows bearish. Use it when the user asks about ETF flows, institutional demand or spot ETF activity. [Access: pay 0.01 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay not
No parameter schema on file.
Every execution-config parameter a strategy can carry: the platform default, what it does, the effect of raising or lowering it, its legal bounds, and whether it is a strategy-character knob, an account guardrail, gated behind another flag, or retained but unused. Call it before discussing or overriding any risk parameter, so you describe the knob that exists rather than one you remember. [Access
No parameter schema on file.
Global crypto market snapshot -- total market cap, BTC dominance, total 24h volume and the 24h change. Use it when the user asks about overall market conditions or wants a macro view rather than a per-asset reading. [Access: pay 0.005 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
No parameter schema on file.
Influence score for a single X/Twitter account: a 0-100 score and follower count. Use it when the user asks about a specific influencer or KOL, or wants to know how much weight an account carries in crypto conversation. It is a per-account snapshot, not a topic aggregate. [Access: pay 0.02 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-p
| Parameter | Type | Required | Notes |
|---|---|---|---|
| username | string | yes | X/Twitter handle, with or without the leading @. |
Per-pool borrow rates across DeFi lending protocols such as Aave, Compound and Morpho. Useful for rate-spread arbitrage screens and stablecoin yield analysis. Use it when the user asks about lending rates, borrow costs or DeFi yield. [Access: pay 0.01 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per cal
No parameter schema on file.
Latest trade price for a selected market, plus aggregate market cap and 24h volume. Pass quote_token and market_data_venue together to honor a requested exchange. When omitted, selects a supported market and returns its quote and venue. Report the returned venue and quote; disclose price_as_of and price_stale. Use it when the user asks what an asset is doing now, or when a live price is needed to
| Parameter | Type | Required | Notes |
|---|---|---|---|
| market_data_venue | string | no | Exact venue of the requested market. |
| provider | string | no | Optional upstream override; omitted uses the existing server default. |
| quote_token | string | no | Quote currency of the requested market. |
| symbol | string | yes | Asset symbol, e.g. BTC or ETH. |
Classify an asset's regime using a lookback of 1-365 days of daily closes: the return and a bull/neutral/bear band over 90, 180 and 365 days, plus annualised volatility as a percentage, a bucket, and a z-score against the asset's own baseline; and the whole lookback in the sweep catalog's labels (direction, low/medium/high volatility for its asset class and length, and a clean/mixed/choppy trend).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| asset | string | yes | Asset symbol, e.g. BTC or ETH. |
| lookback_days | integer | no | Number of days of history to request. |
| market_data_venue | string | no | Exact venue of the requested market. |
| provider | string | no | Optional upstream override; omitted uses the existing server default. |
| quote_token | string | no | Quote currency of the requested market. |
One marketplace listing in full: its metrics, the signals it is built from (names only; the creator's tuning is never exposed), its backtest summary, and whether it is already in this account. Use it before describing or offering a specific listing, so what you say is what the marketplace holds. [Access: pay 0.001 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-c
| Parameter | Type | Required | Notes |
|---|---|---|---|
| strategy_id | string | yes | The strategy's UUID. |
Daily OHLCV (open, high, low, close, volume) history for one crypto asset over the requested lookback (1-3650 days). Use it when the user asks for price history, chart data, or wants to reason about past price movement rather than the current spot. Supply quote_token and market_data_venue together to select an exact market, or provider for an external source; omit these overrides to select a Mangr
| Parameter | Type | Required | Notes |
|---|---|---|---|
| lookback_days | integer | no | Number of days of history to request. |
| market_data_venue | string | no | Exact venue of the requested market. |
| provider | string | no | Optional upstream override; omitted uses the existing server default. |
| quote_token | string | no | Quote currency of the requested market. |
| symbol | string | yes | Asset symbol, e.g. BTC or ETH. |
Per-bar on-chain metric time series for a token. One request returns a bar-indexed series with any combination of SmartMoneyNetflow, SmartMoneyHoldings, ExchangeNetflow, WhaleNetInflow and HolderConcentration. Interval is 1h, 4h, 1d or 1w; top_n is how many top holders HolderConcentration sums; the only provider is nansen. Native ETH is read as WETH, and the token must be deployed on the chain ask
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain | string | no | Chain name or slug, e.g. ethereum or base. |
| date_from | string | no | ISO date string for the start of the window. |
| date_to | string | no | ISO date string for the end of the window. |
| interval | string | no | Candle size, e.g. 15m, 1h, 4h, 1d. |
| metrics | array | yes | Metric names to include in the series. |
| provider | string | no | Optional upstream override; omitted uses the existing server default. |
| symbol | string | yes | Asset symbol, e.g. BTC or ETH. |
| top_n | integer | no | Return only the first this many. |
Aggregated DeFi perpetual funding rates across venues. Positive funding means longs are paying to hold; negative means shorts are. Use it when the user asks about perp funding, crowded positioning or leverage bias. [Access: pay 0.01 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
No parameter schema on file.
Return OHLCV chart data for a specific playground dataset.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| dataset_key | string | yes | — |
Total Value Locked for a single DeFi protocol such as Aave, Uniswap or Curve. Returns USD TVL and a per-chain breakdown. Use it when the user asks how much capital is locked in a specific protocol. [Access: pay 0.01 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
| Parameter | Type | Required | Notes |
|---|---|---|---|
| protocol_name | string | yes | Protocol slug or display name, e.g. aave or uniswap. |
Get complete metadata for an exact registered signal name. [Access: pay 0.001 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
| Parameter | Type | Required | Notes |
|---|---|---|---|
| signal_name | string | yes | Signal name |
Recent DEX trades from smart-money wallets across chains. Returns a paginated list of executed trades with token, side, size and wallet metadata. Use it when the user asks what smart money is trading on DEXs, or wants a raw feed of smart-money swap activity. [Access: pay 0.02 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key cl
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chains | array | no | Optional list of chains to include. |
| filters | object | no | Optional filter object passed through to the upstream provider. |
| order_by | array | no | Optional ordering list passed through to the upstream provider. |
| page | integer | no | Page number for pagination. |
| per_page | integer | no | Page size for pagination. |
One-token flow intelligence snapshot: returns net USD flows and wallet counts for smart traders, whales, exchanges, fresh wallets and public figures together in ONE response. Use for a trailing-window category summary, including the past 24 hours (timeframe=1d). Do not fetch a separate token-flows page for each category to construct this summary. Timeframe is 5m, 1h, 6h, 12h, 1d or 7d. For explici
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain | string | no | Chain name or slug, e.g. ethereum or base. |
| symbol | string | yes | Asset symbol, e.g. BTC or ETH. |
| timeframe | string | no | Aggregation window, e.g. 24h, 7d. |
Historical snapshots of what smart-money wallets held on specific dates. Returns per-wallet-category holdings with USD values. Use it when the user wants to see how smart-money positioning has changed over time, or wants historical on-chain portfolio data for a date range. [Access: pay 0.02 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chains | array | no | Optional list of chains to include. |
| date_from | string | no | ISO date string for the start of the window. |
| date_to | string | no | ISO date string for the end of the window. |
| filters | object | no | Optional filter object passed through to the upstream provider. |
| order_by | array | no | Optional ordering list passed through to the upstream provider. |
| page | integer | no | Page number for pagination. |
| per_page | integer | no | Page size for pagination. |
Current smart-money holdings: what funds and smart traders are holding right now, sorted by USD value. Use it when the user asks what smart money currently owns or has positions in. [Access: pay 0.02 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chains | array | no | Optional list of chains to include. |
| include_labels | array | no | Smart-money wallet labels; omitted uses Fund and Smart Trader. |
| limit | integer | no | Maximum results. |
| min_value_usd | number | no | Minimum USD value to include. |
Aggregated smart-money netflows across all tokens market-wide: which tokens funds and smart traders are accumulating or distributing. Use it when the user asks what smart money is buying or selling, or wants to see market-wide on-chain trends. [Access: pay 0.02 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothi
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chains | array | no | Optional list of chains to include. |
| include_labels | array | no | Smart-money wallet labels; omitted uses Fund and Smart Trader. |
| limit | integer | no | Maximum results. |
| timeframe | string | no | Aggregation window, e.g. 24h, 7d. |
Perpetual futures trades from smart-money wallets on Hyperliquid. Shows leveraged directional bets by sophisticated traders. Use it when the user asks about smart-money perp positions, what high-conviction traders are doing with leverage, or wants to see Hyperliquid smart-money activity. [Access: pay 0.02 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable cl
| Parameter | Type | Required | Notes |
|---|---|---|---|
| filters | object | no | Optional filter object passed through to the upstream provider. |
| order_by | array | no | Optional ordering list passed through to the upstream provider. |
| page | integer | no | Page number for pagination. |
| per_page | integer | no | Page size for pagination. |
On-chain sentiment read for a token derived from smart-money wallet net flows. Returns a sentiment label (bullish, bearish or neutral) and net USD flow direction. Use it when the user asks what smart-money sentiment is for an asset, or wants a quick bullish or bearish read from on-chain flow data. For X or Twitter social sentiment use get_social_sentiment instead. [Access: pay 0.02 USDC via x402
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain | string | no | Chain name or slug, e.g. ethereum or base. |
| symbol | string | yes | Asset symbol, e.g. BTC or ETH. |
Recent X/Twitter posts about a crypto asset or topic: post text, id and time, at most 10 posts, plus how many posts the search matched. Use it when the user wants to see what is actually being said, or wants raw posts rather than an aggregated sentiment score. [Access: pay 0.02 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key
| Parameter | Type | Required | Notes |
|---|---|---|---|
| hours_back | integer | no | Lookback window in hours. |
| limit | integer | no | Maximum results. |
| topic | string | yes | Asset symbol, project name or free-form topic. |
Keyword-polarity sentiment for a crypto cashtag on X/Twitter. It fetches recent posts for $TOPIC and counts how many contain a positive and how many a negative keyword; the 0-100 score is the positive share of those polar posts. Returns the score, a bullish (70 or more), neutral or bearish (30 or less) label, and the number of posts read. When no post carried a sentiment keyword the score is null
| Parameter | Type | Required | Notes |
|---|---|---|---|
| hours_back | integer | no | Lookback window in hours. |
| topic | string | yes | Asset symbol, project name or free-form topic. |
Global stablecoin metrics -- total supply, per-chain breakdown and the top stablecoins by market cap. Use it when the user asks about stablecoin supply, USDC or USDT dominance, or overall market liquidity. [Access: pay 0.005 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
No parameter schema on file.
Fetch one saved strategy in full -- its entry and exit signals, asset, timeframe and status. Accepts either strategy_id or name. Use it before discussing or changing a specific strategy so you describe what is actually stored rather than what was said earlier in the conversation. [Access: pay 0.005 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client wi
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | no | Its name, if the id is unknown. |
| strategy_id | string | no | The strategy's UUID. |
Where one sweep has got to: its status and how many of its runs have finished. This is how you answer 'is it done yet' -- read it when the person asks, not on a loop, because the engine works for minutes or hours and a second look a moment later says the same thing. Results can be read while it is still running; the rows that exist are real.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| experiment_id | string | yes | The sweep, as create_sweep returned it. |
The sweep limits this person's plan actually enforces: the most backtests one sweep may run, the most history it may read, and how many sweeps may be in flight at once. Read these rather than guessing, and say the size in plan terms when a search is over one. Zero means no limit is enforced for this caller and -1 means unlimited; neither is a number to report as a cap.
No parameter schema on file.
One run rebuilt as the strategy it was, entry and exit rules with the parameter values the engine drew. This is the way OUT of a sweep: a row worth acting on becomes a saved strategy and then a real backtest over a window the person chose. Reach for it once a row is interesting, not for every row in a ranking.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| config_hash | string | no | The row's config_hash, as find_sweep_runs reported it. Pass it whenever you have it: a relaunched sweep can give one run_index to several runs, and without it such an index is refused, not guessed. |
| experiment_id | string | yes | The sweep, as create_sweep returned it. |
| run_index | integer | yes | Which run, as find_sweep_runs reported it. |
The exchanges that list one specific token, with per-venue metadata. Use it when the user asks where a token trades or which venues carry it, rather than for a price on any one of them. [Access: pay 0.001 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
| Parameter | Type | Required | Notes |
|---|---|---|---|
| symbol | string | yes | Asset symbol, e.g. BTC or ETH. |
DEX trades for a specific token across all participants in a date window. Returns raw swap events with wallet, size and pool metadata; useful for post-hoc flow analysis on a single token. Native ETH is read as WETH, and the token must be deployed on the chain asked for. [Access: pay 0.02 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain | string | no | Chain name or slug, e.g. ethereum or base. |
| date_from | string | no | ISO date string for the start of the window. |
| date_to | string | no | ISO date string for the end of the window. |
| filters | object | no | Optional filter object passed through to the upstream provider. |
| order_by | array | no | Optional ordering list passed through to the upstream provider. |
| page | integer | no | Page number for pagination. |
| per_page | integer | no | Page size for pagination. |
| symbol | string | yes | Asset symbol, e.g. BTC or ETH. |
Paginated historical flow records for one non-stablecoin token between explicit start and end dates, optionally filtered by one wallet label. Use for date-range records or pagination. For a trailing-window summary of net USD flows AND wallet counts across categories, use get_smart_money_flows, which returns the categories together in one call. Not available for stablecoins. Native ETH is read as W
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chain | string | no | Chain name or slug, e.g. ethereum or base. |
| date_from | string | no | ISO date string for the start of the window. |
| date_to | string | no | ISO date string for the end of the window. |
| filters | object | no | Optional filter object passed through to the upstream provider. |
| label | string | no | Wallet category: smart_money, exchange, whale, public_figure, or top_100_holders. |
| order_by | array | no | Optional ordering list passed through to the upstream provider. |
| page | integer | no | Page number for pagination. |
| per_page | integer | no | Page size for pagination. |
| symbol | string | yes | Asset symbol, e.g. BTC or ETH. |
On-chain token holder distribution for a token: total on-chain holder count, top-10 concentration percentage and a concentration score. Nansen aggregates across chains, so pass the symbol only and do not pass a chain argument. Use it when the user asks how many wallets hold a token, about holder count, holder concentration, whale ownership or distribution risk. [Access: pay 0.02 USDC via x402 (PA
| Parameter | Type | Required | Notes |
|---|---|---|---|
| symbol | string | yes | Asset symbol, e.g. BTC or ETH. |
Token unlock schedules and supply metrics -- upcoming vesting cliffs and total supply movement per token. Heavy near-term unlocks are a supply-shock signal. Use it when the user asks about unlocks, vesting or supply overhang. [Access: pay 0.01 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
No parameter schema on file.
DeFi protocol treasury holdings -- how much a protocol holds in its own treasury and what tokens it owns. Use it when the user asks about protocol treasuries, DAO holdings or protocol-owned liquidity. [Access: pay 0.01 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
No parameter schema on file.
The crypto assets trending right now by 24h search volume. Use it when the user asks what is popular, what the market is paying attention to, or wants a discovery view rather than a specific asset lookup. [Access: pay 0.005 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
No parameter schema on file.
Read a requested KB guide or a known source section by slug. Use directly when the user requests the document itself; no preliminary graph call is required. For a general explanation use query_knowledge op=ask, not a document-reading sequence. If a needed slug is unknown, locate it with kb_search or kb_list_documents. Use view=overview for a guide summary; view=section with a returned section_anch
| Parameter | Type | Required | Notes |
|---|---|---|---|
| full | boolean | no | Explicit full content download; cannot combine with offset or max_chars. |
| max_chars | integer | no | Page size, default 6000, capped at 12000 and the response budget. |
| offset | integer | no | Pagination offset in the result units documented by the tool; zero starts the first page. |
| section_anchor | string | no | Exact anchor from overview or search, required only for section view. |
| slug | string | yes | The document slug. |
| view | string | no | Use overview for a brief summary and headings; section for a specific topic; content for document pages. |
Read the Signals Quick Reference guide when the user asks for that guide or its documented entries. This is the document-reading shortcut for kb_get_document slug=10-signals-quick-reference, not an additional validation step. Use view=overview for its outline or view=section with a known anchor for a passage. Content defaults to 6000 characters; offset and next_offset count characters within the s
| Parameter | Type | Required | Notes |
|---|---|---|---|
| full | boolean | no | Explicit full content download; cannot combine with offset or max_chars. |
| max_chars | integer | no | Page size, default 6000, capped at 12000 and the response budget. |
| offset | integer | no | Pagination offset in the result units documented by the tool; zero starts the first page. |
| section_anchor | string | no | Exact anchor from overview or search, required only for section view. |
| view | string | no | Use overview for a brief summary and headings; section for a specific topic; content for document pages. |
Return the KB glossary entry for an explicitly requested glossary definition or exact glossary term. No preliminary graph call is required for a glossary request. For a general question such as what RSI means, why it behaves that way, or which indicators complement it, start with query_knowledge op=ask. Exact lookup is case-insensitive and may return partial matches. Answer from the returned defin
| Parameter | Type | Required | Notes |
|---|---|---|---|
| term | string | yes | The term to look up, case-insensitive. |
Reads the Mangrove Knowledge Base package: every document's slug, title and summary. For a keyword search instead of browsing use kb_search. Use this when the user wants to browse the KB or you need a slug before calling kb_get_document.
No parameter schema on file.
Locate KB articles or source sections using short topic keywords. Use when the user asks to find written material, or an explanation is missing a specific fact that requires a source passage. For general definitions, explanations, comparisons and combination/caution questions, start with query_knowledge op=ask instead. This returns snippets and section anchors, not full articles. All query terms m
| Parameter | Type | Required | Notes |
|---|---|---|---|
| expand | boolean | no | Whether to expand synonyms; ignored when tags are set. |
| limit | integer | no | Maximum results. |
| q | string | yes | The search text, in ordinary words. |
| tag | string | no | Restrict to one tag category; disables synonym expansion. |
| tags | array | no | Restrict to any of these tag categories; cannot combine with tag. |
Start a validated sweep. THIS IS THE ONE CALL THAT SPENDS: it puts the engine to work on every run the search describes, for minutes or hours, and there is no undoing it -- pause_sweep stops further work but does not give back what already ran. So say the run count out loud and get the person's agreement before calling it; a number they never saw is not one they agreed to. It returns immediately w
| Parameter | Type | Required | Notes |
|---|---|---|---|
| experiment_id | string | yes | The sweep, as create_sweep returned it. |
List assets approved by Mangrove, including supported stablecoins and tokens. Approval is independent of risk assessment. Unassessed risk scores are null; do not interpret them as zero or infer regulatory approval. Returns available market metadata and risk scores. [Access: pay 0.001 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; AP
| Parameter | Type | Required | Notes |
|---|---|---|---|
| top_n | integer | no | Return only the first this many. |
List available execution venue and quote-token choices for a backtest. Use when the user wants alternatives or market details are missing. A complete supplied or recorded market is already the default: do not force a selection step. If missing details must be matched, suggest an available match and obtain confirmation before saving or running. Availability here does not guarantee historical covera
| Parameter | Type | Required | Notes |
|---|---|---|---|
| asset | string | yes | Asset symbol, e.g. BTC or ETH. |
The user's recent backtest runs, newest first, optionally just the ones for one strategy. Use it when they ask what they have run, or refer to an earlier result without giving an id -- then fetch the one you need with get_backtest. It is how you avoid re-running something that already has an answer. Results are newest first; pass strategy_id to see only one strategy's runs. [Access: pay 0.001 USD
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | integer | no | Maximum results. |
| strategy_id | string | no | The strategy's UUID. |
Every exchange the Mangrove platform tracks, with per-exchange tier and 24h volume. Use it when the user asks what exchanges are supported or wants to browse the exchange universe rather than a single venue. [Access: pay 0.001 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
No parameter schema on file.
Return metadata for all available playground CSV datasets.
No parameter schema on file.
The values a sweep's runs actually carry: which assets, which candle sizes, and which entry triggers the engine drew. Read this before filtering by one of them, because a value nothing carries comes back as an empty page that reads exactly like a search with nothing good in it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| experiment_id | string | yes | The sweep, as create_sweep returned it. |
Every signal's friendly name, display name and short description, keyed by code name.
No parameter schema on file.
List available trading signals: names, types (TRIGGER or FILTER) and short descriptions. Use it to browse the catalogue, or narrow it by regime band, role or library category. [Access: pay 0.001 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
| Parameter | Type | Required | Notes |
|---|---|---|---|
| category | string | no | Filter by category (momentum, trend, volume, volatility, patterns, onchain) |
| limit | integer | no | Page size: default 30, maximum 30. Larger requests are capped; use next_offset to continue. |
| offset | integer | no | Pagination offset |
| regime_direction | string | no | Filter to signals admissible for a regime band (mega_bull, super_bull, bull, neutral, bear, super_bear, mega_bear) |
| role | string | no | Filter by the part a signal plays in a strategy (TRIGGER or FILTER) |
List the caller's saved strategies, including drafts, backtested strategies and server-managed paper strategies. Returns id, name, asset and status. Use paper execution status for current run state and balances. list_platform_strategies covers separate platform deployments.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | integer | no | Maximum results. |
What history a sweep could run over, as the choices to offer and how many windows each one would add. Oracle keeps MANY separate windows per asset -- different date spans of the same market, each labelled with the character of the market inside it -- and a sweep runs over every one that matches, which is what stops a result that only held in one period from looking general. CALL THIS BEFORE ANYTHI
| Parameter | Type | Required | Notes |
|---|---|---|---|
| assets | array | no | Asset symbols, e.g. ["BTC", "ETH"]. |
| candle_sizes | array | no | Candle sizes, e.g. ["1h"]. Omitted, every size Oracle holds for those assets, which multiplies the windows. |
| include_gapped | boolean | no | Include windows missing bars. Off by default, because a metric over a half-covered window is not comparable to one over a whole window. |
| regimes | array | no | Market conditions to keep: current, bear, neutral, bull. current means data within the last 30 days, which is recency and not direction. Omitted, every condition. |
| windows | array | no | Specific window files to include whatever else is chosen. |
The sweeps this account can see, newest first. Call it whenever the person refers to a search rather than asking for a new one -- 'how did that one go', 'what have I run' -- so you read an existing sweep instead of paying to repeat it. Live progress is not in this list; get_sweep has it for the one that matters.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | integer | no | Maximum results. |
The trades a person's strategies have closed -- what was made or lost on each, why it exited, and what the fees and slippage cost. For a platform account overview and last-trade times use list_platform_strategies; platform detail requires strategy_id. Use this for what actually happened: 'how am I doing', 'what did it trade', 'why did it sell', 'has it made money'. Pass strategy_id for one strateg
| Parameter | Type | Required | Notes |
|---|---|---|---|
| asset | string | no | Asset symbol, e.g. BTC or ETH. |
| limit | integer | no | Maximum results. |
| outcome | string | no | Only "win" or only "loss". |
| strategy_id | string | no | The strategy's UUID. |
Load one of your skills: the full instructions for doing something, which the turn only announced by name. Do it BEFORE working in a skill's area rather than after -- the announcement says what a skill is for, and the skill itself says how, including which calls to make and what not to do. Pass a section name to load only part of it. A skill may also carry FILES it tells you to read -- a lookup ta
| Parameter | Type | Required | Notes |
|---|---|---|---|
| resource | string | no | One file the skill carries, by name, as resources lists them. |
| section | string | no | One section of it, by heading. Omit for the whole skill. |
| skill | string | yes | Which skill, by the name the turn announced. |
Match a trading description to ranked signals. [Access: pay 0.01 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
| Parameter | Type | Required | Notes |
|---|---|---|---|
| description | string | yes | Natural language description of the desired signal/rule |
| regime_direction | string | no | Market regime band |
| role | string | no | Signal role |
| similarity_threshold | number | no | Minimum similarity score to include |
| top_k | integer | no | Number of matches to return |
| user_intent | object | no | Optional intent dict (e.g., from intent extractor) |
Stop a running sweep from doing any more work, keeping every result it has already written. Use it when the person has seen enough, or when a search turned out far larger than they wanted. It does not undo what already ran, and the results stay readable afterwards -- so it is a way to stop spending, not a way to take it back. Say how many runs finished, which is what they keep. A sweep that was on
| Parameter | Type | Required | Notes |
|---|---|---|---|
| experiment_id | string | yes | The sweep, as create_sweep returned it. |
Explain trading concepts, definitions, relationships, comparisons and when signals work or fail using Michael's knowledge graph. This is the first tool for a general knowledge question, including which indicators complement RSI and when to avoid combining them. Start with op=ask, the complete question in q, hops=1 and limit=5. Keep related clauses together; do not run a search for each clause. Rea
| Parameter | Type | Required | Notes |
|---|---|---|---|
| bounded | boolean | no | outputs: only values with a fixed range. |
| direction | string | no | neighbors: in = what reads this, out = what this depends on. |
| hops | integer | no | ask: how far to walk from each match. 0 restricts it to retrieval. Capped at 3; a higher value raises ValueError naming the cap. |
| kind | string | no | The class: what a computation measures. |
| limit | integer | no | Maximum results. |
| max_depth | integer | no | path, paths: how long a route may be. path defaults to 6; paths defaults to 4 and is capped at 4 -- past that almost every extra route is a detour through a hub rather than an explanation. |
| max_nodes | integer | no | walk: stop expanding once this many nodes are collected. |
| op | string | yes | Which question you are asking. |
| param | string | no | find: a parameter name -- every signal that takes it. |
| primitive | string | no | neighbors: keep only neighbours of this node primitive, e.g. Procedure or Concept. |
| q | string | no | The search text, in ordinary words. |
| radius | integer | no | walk: how many hops out the neighbourhood reaches. Capped at 3; for anything wider call neighbors or path instead of a bigger radius. |
| relation | string | no | neighbors: follow only this one relation. |
| relation_category | string | no | neighbors: follow only edges of this whole relation category (structural, descriptive, associative, meta) -- see stats for the list. |
| relations | array | no | path, paths, ask: follow only these relations. |
| requires | string | no | An input column it needs. |
| role | string | no | The part a signal plays in a strategy. |
| seeds | integer | no | ask: how many top matches to expand from before re-ranking. |
| sibling_hops | boolean | no | paths: include routes that pass through a shared parent (both nodes are, say, Signal) rather than a direct connection. Off by default -- those routes are usually not the explanation. |
| status | string | no | Whether the thing is current or withdrawn. |
Query measured signal behaviour: describe, pick, find or gap_probability. [Access: pay 0.005 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
| Parameter | Type | Required | Notes |
|---|---|---|---|
| category | string | no | find: restrict to one family, e.g. oscillator, volatility, momentum |
| limit | integer | no | Maximum results, 1-100 |
| lookup | string | yes | describe: one signal -- parameter meanings, measured span, what its default measures. pick: settings of one signal that hit target_rate. find: which signals reach a rate band. gap_probability: share o |
| max_gap_bars | number | no | pick/find, TRIGGER only: median gap at most this many bars |
| max_gap_range_bars | number | no | gap_probability: high end of the gap range, inclusive (required) |
| max_rate | number | no | find: high end of the band, same units (required) |
| max_run_bars | number | no | pick/find, FILTER only: mean run at most this many bars |
| min_gap_bars | number | no | pick/find, TRIGGER only: median gap at least this many bars |
| min_gap_range_bars | number | no | gap_probability: low end of the gap range, inclusive (required) |
| min_rate | number | no | find: low end of the band, same units (required) |
| min_run_bars | number | no | pick/find, FILTER only: mean run at least this many bars |
| signal | string | no | Signal name, e.g. rsi_oversold. Required by describe, pick, gap_probability |
| signal_type | string | no | FILTER (an ongoing state) or TRIGGER (a one-bar event); measured separately |
| target_rate | number | no | pick: rate to aim for -- FILTER selectivity 0-1, TRIGGER firings per 1,000 bars. Omit to list the span |
Start a backtest of one saved strategy over a window of history. Takes a strategy_id -- it reads the stored strategy's own rules, asset, timeframe and risk parameters. The recorded market is the default; pass quote_token and/or market_data_venue when the person chooses another quote or execution venue. An omitted choice keeps its recorded value. Check and report the selected market; never silently
| Parameter | Type | Required | Notes |
|---|---|---|---|
| acknowledge_defaults | boolean | no | Pass True to submit even though signal parameters are at their library defaults -- an explicit statement that the defaults were considered and stood by, never a way to skip considering them. |
| end_date | string | yes | ISO end of the window. |
| engine_generation | integer | no | Only set when the person specifies an engine generation; omitted uses latest. |
| market_data_venue | string | no | Exact venue of the requested market. |
| quote_token | string | no | Quote currency of the requested market. |
| start_date | string | yes | ISO start of the window, e.g. 2026-01-01. |
| strategy_id | string | yes | The strategy's UUID. |
To promote a sweep pick, pass source_experiment_id and source_run_index; the service loads its authorized configuration and checks coverage before saving. Its recorded venue and quote token are defaults: pass market_data_venue and/or quote_token only when the person chooses a different market. Otherwise compose and save a trading strategy from signals in the library. Give it a strategy_name, an as
| Parameter | Type | Required | Notes |
|---|---|---|---|
| asset | string | yes | Asset symbol, e.g. BTC or ETH. |
| constraints | object | no | Execution values the person stated, e.g. {"max_risk_per_trade": 0.01}. Each is kept exactly as given rather than nudged. |
| entry_signals | array | no | The signals that open a position. Exactly one must be a TRIGGER in the knowledge graph; the rest are FILTERs. |
| exit_signals | array | no | The signals that close one, same shape. A strategy may have none, and then it exits on risk rules alone. |
| market_data_venue | string | no | Exact venue of the requested market. |
| quote_token | string | no | Quote currency of the requested market. |
| regime_direction | string | no | The direction band from get_market_regime, e.g. bear. The signal searches filter by it and find_sweep_runs marks each row's regime_fit with it; save_strategy and update_strategy read the current band |
| regime_override | boolean | no | Save anyway when the regime check refuses. Only ever on the person's explicit say-so, after they have been told why. |
| source_config_hash | string | no | The selected row's config_hash, as find_sweep_runs reported it. Pass it with the other two: a relaunched sweep can give one run_index to several runs, and without it such an index is refused. |
| source_experiment_id | string | no | For a sweep pick, its experiment ID. Supply with source_run_index. The stored run supplies the exact signals and execution settings. With no market given, it saves on the run's corpus market, or on th |
| source_run_index | integer | no | The selected sweep row, including zero. |
| strategy_name | string | yes | What to call it, in plain words a person reads -- the entry trigger's friendly_name from the knowledge graph, then the asset and timeframe, e.g. "Upside Range Breakout - BTC 1h". Never a code name suc |
Rank several candidate strategies by how likely each is to trade at all, before spending backtests on them. Give it one asset and up to 99 candidates, each {entry: [...], exit: [...]} with signals from the library -- the roles come from the library, so do not pass signal_type. IT PREDICTS WHETHER A STRATEGY WILL PLACE TRADES, AND NOTHING ABOUT WHETHER IT WILL MAKE MONEY: only a backtest answers th
| Parameter | Type | Required | Notes |
|---|---|---|---|
| asset | string | yes | Asset symbol, e.g. BTC or ETH. |
| candidates | array | yes | Each {entry: [{name, params?, timeframe?}], exit: [...]}. |
Screen the market for tokens that smart-money wallets are currently accumulating or distributing. Returns a ranked list of tokens with high smart-money activity across the specified chains. Use it when the user asks what smart money is currently buying, which tokens are being accumulated, or wants to discover high-conviction smart-money plays. [Access: pay 0.02 USDC via x402 (PAYMENT-SIGNATURE he
| Parameter | Type | Required | Notes |
|---|---|---|---|
| chains | array | no | Optional list of chains to include. |
| limit | integer | no | Maximum results. |
| timeframe | string | no | Aggregation window, e.g. 24h, 7d. |
Search the public strategy marketplace -- the platform's own listings, which are digital-asset strategies on crypto pairs -- over every dimension the marketplace page filters on: free text, asset, timeframe, risk level, floors on return, IRR, Sharpe, Sortino, Calmar, gain-to-pain, win rate, trade count and trades per week, a drawdown ceiling, free-only, beats-benchmarks, the market regime the list
| Parameter | Type | Required | Notes |
|---|---|---|---|
| asset | string | no | Asset symbol, e.g. BTC or ETH. |
| asset_class | array | no | Keep listings in these asset classes. Platform listings are all digital_assets; stocks, options and futures exist only as NexusTrade partner listings the chat cannot reach. |
| backtest_direction | string | no | Keep listings backtested in this market direction, e.g. bull, neutral or bear -- the band get_market_regime reports; or unclassified. |
| backtest_trend | string | no | Keep listings backtested in this trend character, e.g. clean, choppy; or unclassified. |
| backtest_volatility | string | no | Keep listings backtested in this volatility band, e.g. low, medium, high; or unclassified. |
| beats_all_benchmarks | boolean | no | Keep only listings whose return beat BTC, ETH and the S&P over their own window. |
| candle_size | string | no | Duration of one candle, e.g. 1h or 1d. |
| free_only | boolean | no | Keep only listings with no subscription price. |
| limit | integer | no | Maximum results. |
| max_drawdown_pct | number | no | Keep listings whose max drawdown is at or below this, in percent. |
| min_calmar_ratio | number | no | Keep listings at or above this Calmar ratio. |
| min_gain_to_pain_ratio | number | no | Keep listings at or above this gain-to-pain ratio. |
| min_irr_pct | number | no | Keep listings at or above this annualised IRR, in percent. |
| min_sharpe_ratio | number | no | Keep listings at or above this Sharpe ratio. |
| min_sortino_ratio | number | no | Keep listings at or above this Sortino ratio. |
| min_total_return_pct | number | no | Keep listings at or above this total return, in percent. |
| min_total_trades | integer | no | Keep listings with at least this many trades. |
| min_trades_per_week | number | no | Keep listings trading at least this often, per week. |
| min_win_rate_pct | number | no | Keep listings at or above this win rate, in percent. |
| offset | integer | no | Pagination offset in the result units documented by the tool; zero starts the first page. |
Search signal names, parameters or description keywords. [Access: pay 0.005 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
| Parameter | Type | Required | Notes |
|---|---|---|---|
| category | string | no | Signal library module |
| limit | integer | no | Maximum results |
| offset | integer | no | Pagination offset |
| query | string | yes | Search query string |
| regime_direction | string | no | Market regime band |
| role | string | no | Signal role |
| search_type | string | no | Type of search |
How big a search would be, without creating anything. THIS IS THE NUMBER YOU SAY OUT LOUD, and it is almost never the number the person named: the draw count is PER WINDOW and Oracle keeps many windows per asset. Oracle counts it by walking exactly what the plan would walk, so nothing else can be trusted to work it out. Free, and repeatable -- call it after every change while the size is being set
| Parameter | Type | Required | Notes |
|---|---|---|---|
| assets | array | no | Asset symbols, e.g. ["BTC", "ETH"]. |
| candidate_shape | object | no | How many parts a drawn strategy gets, any of n_entry_triggers, min_entry_filters, max_entry_filters, min_exit_triggers, max_exit_triggers, min_exit_filters, max_exit_filters. Omitted, the platform def |
| candle_sizes | array | no | Candle sizes, e.g. ["1h"]. Omitted, every size Oracle holds for those assets, which multiplies the windows. |
| categories | array | no | Draw only from these signal classes, e.g. ["momentum"]. The classes are averaging, flow, momentum, oscillator, pattern and volatility. Omitted, the whole library. |
| draws_per_dataset | integer | no | How many candidate strategies to draw PER WINDOW. The runs that execute are this multiplied by the number of windows. |
| entry_filters | array | no | Draw entry filters only from these. Omitted, every filter. |
| entry_triggers | array | no | Draw the entry trigger only from these signals, named as the knowledge graph registers them. Omitted, every trigger. |
| execution_base | object | no | Risk settings every run shares, from the execution config schema. Omitted, platform canon. |
| execution_sweeps | object | no | Execution parameters to search too, each {param: {min, max, n}}. Every one of these multiplies the run count. |
| exit_filters | array | no | Draw exit filters only from these. |
| exit_triggers | array | no | Draw an exit trigger only from these. Omitted, no exit signal is drawn at all and runs exit on the risk settings. |
| include_gapped | boolean | no | Include windows missing bars. Off by default, because a metric over a half-covered window is not comparable to one over a whole window. |
| max_total_runs | integer | no | A ceiling on the executed runs, applied by Oracle. |
| param_samples | integer | no | How many values each signal parameter contributes. The space is their product, so this is the dial that decides whether the search explores parameters at all; at 1 every candidate runs at a single set |
| pre_filter_threshold | number | no | Skip a drawn candidate the SIEVE model predicts will not trade at all, above this confidence. A will-it-trade gate and nothing about whether it will make money. Omitted, no skipping. |
| regimes | array | no | Market conditions to keep: current, bear, neutral, bull. current means data within the last 30 days, which is recency and not direction. Omitted, every condition. |
| signal_groups | array | no | Keep kinds of signal apart. A candidate draws ALL of its signals from ONE group, so two signals in different groups never appear on the same strategy. Runs are split across the groups. |
| windows | array | no | Specific window files to include whatever else is chosen. |
Change a DRAFT strategy in place: its signals, their parameters, or a stated execution value. Pass the COMPLETE entry and exit signal lists when changing signals -- what you pass replaces what was stored, it is not merged, while constraints merge onto the stored execution config. Only a draft that has never been backtested can change: once a backtest has measured it, its rules are frozen so the re
| Parameter | Type | Required | Notes |
|---|---|---|---|
| constraints | object | no | Execution values the person stated, e.g. {"max_risk_per_trade": 0.01}. Each is kept exactly as given rather than nudged. |
| entry_signals | array | no | The signals that open a position. Exactly one must be a TRIGGER in the knowledge graph; the rest are FILTERs. |
| exit_signals | array | no | The signals that close one, same shape. A strategy may have none, and then it exits on risk rules alone. |
| regime_direction | string | no | The direction band from get_market_regime, e.g. bear. The signal searches filter by it and find_sweep_runs marks each row's regime_fit with it; save_strategy and update_strategy read the current band |
| regime_override | boolean | no | Save anyway when the regime check refuses. Only ever on the person's explicit say-so, after they have been told why. |
| strategy_id | string | yes | The strategy's UUID. |
| strategy_name | string | no | What to call it, in plain words a person reads -- the entry trigger's friendly_name from the knowledge graph, then the asset and timeframe, e.g. "Upside Range Breakout - BTC 1h". Never a code name suc |
Validate parameters for a signal. [Access: pay 0.001 USDC via x402 (PAYMENT-SIGNATURE header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
| Parameter | Type | Required | Notes |
|---|---|---|---|
| parameters | object | no | — |
| signal_name | string | yes | Signal name |
Check a saved strategy against everything that has to be true for it to run: the signal names and their parameter keys, the roles composing, a timeframe on every signal, and a timeframe on the strategy. Call it after saving and BEFORE backtesting -- a backtest spends the person's allowance the moment it is submitted, whether or not it runs, and these are the faults that make it fail at setup with
| Parameter | Type | Required | Notes |
|---|---|---|---|
| strategy_id | string | yes | The strategy's UUID. |
Discover Mangrove managed tools without executing them. Free, public read. Use detail=areas for the functional area index; summary (default) returns only names and descriptions; schema returns full live tool definitions. Select any areas and/or tool names; combined selectors form a union.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| areas | array | no | Functional area names returned by detail=areas. |
| detail | string | no | Output detail. The areas index takes no selectors. |
| names | array | no | One or any number of exact advertised tool names. |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install MangroveAI or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | high | capability blast radius (high) — client exposure if the model is manipulated | −6 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. high is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| delete_strategy | state-write | state-write: declares readOnlyHint: false |
| get_trades_for_strategy | no tags | |
| list_positions | no tags | |
| evaluate_strategy | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| list_evaluations | no tags | |
| build_strategy_for_regime | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| classify_market_segment | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| create_sweep | state-write | state-write: declares readOnlyHint: false |
| evaluate_multiple_signals_series | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| evaluate_signal | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| find_sweep_runs | no tags | |
| get_asset | no tags | |
| get_backtest | untrusted-input | untrusted-input: keyword "fetch" |
| get_backtest_trades | no tags | |
| get_benchmark | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_chain_tvl | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_etf_flows | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_execution_config_schema | no tags | |
| get_global_market | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_influence_score | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_lending_rates | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_market_data | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_market_regime | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_marketplace_strategy | no tags | |
| get_ohlcv | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_onchain_series | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_perp_funding_rates | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_playground_data | no tags | |
| get_protocol_tvl | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_signal | no tags | |
| get_smart_money_dex_trades | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_smart_money_flows | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_smart_money_historical_holdings | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_smart_money_holdings | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_smart_money_netflows | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_smart_money_perp_trades | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_smart_money_sentiment | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_social_mentions | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_social_sentiment | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_stablecoin_metrics | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_strategy | untrusted-input | untrusted-input: keyword "fetch" |
| get_sweep | no tags | |
| get_sweep_limits | no tags | |
| get_sweep_run | no tags | |
| get_symbol_exchanges | no tags | |
| get_token_dex_trades | sensitive-sourceuntrusted-input | sensitive-source: keyword "get_token"; untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_token_flows | sensitive-sourceuntrusted-input | sensitive-source: keyword "get_token"; untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_token_holders | sensitive-sourceuntrusted-input | sensitive-source: keyword "get_token"; untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_token_unlocks | sensitive-sourceuntrusted-input | sensitive-source: keyword "get_token"; untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_treasuries | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_trending | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| kb_get_document | no tags | |
| kb_get_signal_quick_reference | no tags | |
| kb_glossary_get | no tags | |
| kb_list_documents | untrusted-input | untrusted-input: keyword "browse" |
| kb_search | no tags | |
| launch_sweep | state-write | state-write: declares readOnlyHint: false |
| list_approved_assets | no tags | |
| list_backtest_markets | no tags | |
| list_backtests | untrusted-input | untrusted-input: keyword "fetch" |
| list_exchanges | untrusted-input | untrusted-input: keyword "browse" |
| list_playground_datasets | no tags | |
| list_run_filters | no tags | |
| list_signal_labels | no tags | |
| list_signals | untrusted-input | untrusted-input: keyword "browse" |
| list_strategies | no tags | |
| list_sweep_markets | no tags | |
| list_sweeps | no tags | |
| list_trades | no tags | |
| load_skill | no tags | |
| match_signals | no tags | |
| pause_sweep | state-write | state-write: declares readOnlyHint: false |
| query_knowledge | untrusted-input | untrusted-input: keyword "fetch" |
| query_signal_behavior | no tags | |
| run_backtest | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| save_strategy | state-write | state-write: declares readOnlyHint: false |
| screen_candidates | no tags | |
| screen_smart_money | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| search_marketplace | no tags | |
| search_signals | no tags | |
| size_sweep | no tags | |
| update_strategy | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| validate_signal_params | no tags | |
| verify_strategy | no tags | |
| discover_tools | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.0.2.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish MangroveAI can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.