MangroveAI
REMOTE · API.MANGROVEDEVELOPER.AI
Backtest and paper-trade crypto strategies. Free API key or pay per call in USDC (x402).
Available components
Last scanned (19 minutes ago)
Scores higher than 46% of remote servers
Reachable. Last reached 23 Oct 2026.
Category Crypto and Web3
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security63
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 75 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability62
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 16545 tokens (~217/item across 76 items; 76 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management3
- Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage98
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 95% of tool parameters carry a description.Partial
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_strategy" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 76 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
- Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 23 Oct 26 +1
- Stability: unverified → 0.03 ▲ functional
- 22 Oct 26 61
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 23 Oct 2026 · Probed https://api.mangrovedeveloper.ai/mcp/
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=api.mangrovedeveloper.ai | CN=WR3,O=Google Trust Services,C=US | 25 Sept 2026 | 24 Dec 2026 | RSA 2048 | SHA256-RSA | aae04edd20fa9b940ab5455cdb70a4bd |
| SANs: api.mangrovedeveloper.ai | ||||||
| CN=WR3,O=Google Trust Services,C=US (CA) | CN=GTS Root R1,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | RSA 2048 | SHA256-RSA | 7ff005a91568d63abc22861684aa4b5a |
| CN=GTS Root R1,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 19 Jun 2020 | 28 Jan 2028 | RSA 4096 | SHA256-RSA | 77bd0d6cdb36f91aea210fc4f058d30d |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of api.mangrovedeveloper.ai. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| ai. | present | 3799 | 8 | Verified |
| mangrovedeveloper.ai. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains; preload |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | same-origin |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://api.mangrovedeveloper.ai/mcp/ | Verified | 200 | |
| http (plaintext) | http://api.mangrovedeveloper.ai/mcp/ | HTTPS enforced | 301 | https://api.mangrovedeveloper.ai:443/mcp/ |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
kb_search ~226
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 must match; do not send a full question or split it into speculative keyword searches. A tag restricts the category and disables synonym expansion. If the snippets or attached graph evidence answer the request, answer directly. Read one returned section with kb_get_document only if a required fact is still missing. Do not automatically search again or read every result.
| Name | Type | Req | Description |
|---|---|---|---|
| expand | boolean | – | Whether to expand synonyms; ignored when tags are set. |
| limit | integer | – | Maximum results. |
| q | string | yes | The search text, in ordinary words. |
| tag | string | – | Restrict to one tag category; disables synonym expansion. |
| tags | array | – | Restrict to any of these tag categories; cannot combine with tag. |
No output schema declared.
No examples provided.
list_approved_assets ~118
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; API-key clients pay nothing per call.]
| Name | Type | Req | Description |
|---|---|---|---|
| top_n | integer | – | Return only the first this many. |
No output schema declared.
No examples provided.
list_backtest_markets ~103
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 coverage; submission checks the chosen window.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | yes | Asset symbol, e.g. BTC or ETH. |
No output schema declared.
No examples provided.
list_backtests ~156
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 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.]
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum results. |
| strategy_id | string | – | The strategy's UUID. |
No output schema declared.
No examples provided.
list_evaluations ~113
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'.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| offset | integer | – | – |
| strategy_id | string | yes | – |
No output schema declared.
No examples provided.
list_exchanges ~97
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.]
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_playground_datasets ~20
Return metadata for all available playground CSV datasets.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_positions ~80
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.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | – | – |
| limit | integer | – | – |
| open_only | boolean | – | – |
| strategy_id | string | – | – |
No output schema declared.
No examples provided.
list_signal_labels ~26
Every signal's friendly name, display name and short description, keyed by code name.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_signals ~214
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.]
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | Filter by category (momentum, trend, volume, volatility, patterns, onchain) |
| limit | integer | – | Page size: default 30, maximum 30. Larger requests are capped; use next_offset to continue. |
| offset | integer | – | Pagination offset |
| regime_direction | string | – | Filter to signals admissible for a regime band (mega_bull, super_bull, bull, neutral, bear, super_bear, mega_bear) |
| role | string | – | Filter by the part a signal plays in a strategy (TRIGGER or FILTER) |
No output schema declared.
No examples provided.
list_strategies ~84
List the strategy definitions saved HERE, in this service -- drafts and backtested strategies authored through chat. This store never knows deployment state: for what the user is actually running (live or paper deployments, balances, PnL), use list_platform_strategies instead. Returns id, name, asset and status for each.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum results. |
No output schema declared.
No examples provided.
list_trades ~270
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 strategy's record. THESE ARE REAL TRADES, not a backtest -- never mix them with backtest metrics in one number, and say which you are quoting. Every trade carries fee_cost, slippage_cost and gas_cost; a profit or loss quoted without them reads as though trading were free. Passing strategy_id takes precedence -- asset and outcome are not applied alongside it. [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.]
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | – | Asset symbol, e.g. BTC or ETH. |
| limit | integer | – | Maximum results. |
| outcome | string | – | Only "win" or only "loss". |
| strategy_id | string | – | The strategy's UUID. |
No output schema declared.
No examples provided.
load_skill ~197
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 table, a mapping -- and `resources` names them; pass one as `resource` to be given it. Asking for a skill, a section or a resource that does not exist returns the ones that do.
| Name | Type | Req | Description |
|---|---|---|---|
| resource | string | – | One file the skill carries, by name, as `resources` lists them. |
| section | string | – | One section of it, by heading. Omit for the whole skill. |
| skill | string | yes | Which skill, by the name the turn announced. |
No output schema declared.
No examples provided.
match_signals ~144
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.]
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | yes | Natural language description of the desired signal/rule |
| regime_direction | string | – | Market regime band |
| role | string | – | Signal role |
| similarity_threshold | number | – | Minimum similarity score to include |
| top_k | integer | – | Number of matches to return |
| user_intent | object | – | Optional intent dict (e.g., from intent extractor) |
No output schema declared.
No examples provided.
query_knowledge ~1,237
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. Read the summaries and edge reasons before deciding on another call. Answer once the requested explanation and cautions are supported. A follow-up must address a specific missing fact: get an already-returned node for its details, or read one relevant KB section. Do not gather extra context, enumerate neighbors, check the signal catalogue or measure signals merely to expand a conceptual answer. If evidence remains insufficient, say what is unknown instead of repeatedly rephrasing searches. This guidance does not replace validation required for an actual strategy or a requested graph exploration. Explicit glossary, document and browsing requests go directly to the corresponding KB tool without a preliminary graph call. Runtime signal selection belongs to the signal catalogue; measured firing rates and durations belong to query_signal_behavior; current market regime belongs to get_market_regime. These are separate user intents, not mandatory steps for an explanation. Mangrove product policy belongs to query_product_facts. Reuse evidence and node IDs already returned in this conversation. Ops: stats (the counts and the complete vocabulary every filter accepts -- call it when you do not already know the filter values), find (search BY WORDS, optionally by kind/role/status/requires/param -- param finds every signal taking a parameter of that name), ask (search BY MEANING -- give it the question in ordinary words; use this when you would otherwise answer from memory, e.g. 'how far should the stop go', 'what works in a sideways market'; hops is capped at 3), get (one node in full: f…
| Name | Type | Req | Description |
|---|---|---|---|
| bounded | boolean | – | outputs: only values with a fixed range. |
| direction | string | – | neighbors: in = what reads this, out = what this depends on. |
| hops | integer | – | 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 | – | The class: what a computation measures. |
| limit | integer | – | Maximum results. |
| max_depth | integer | – | 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 | – | walk: stop expanding once this many nodes are collected. |
| op | string | yes | Which question you are asking. |
| param | string | – | find: a parameter name -- every signal that takes it. |
| primitive | string | – | neighbors: keep only neighbours of this node primitive, e.g. Procedure or Concept. |
| q | string | – | The search text, in ordinary words. |
| radius | integer | – | 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 | – | neighbors: follow only this one relation. |
| relation_category | string | – | neighbors: follow only edges of this whole relation category (structural, descriptive, associative, meta) -- see stats for the list. |
| relations | array | – | path, paths, ask: follow only these relations. |
| requires | string | – | An input column it needs. |
| role | string | – | The part a signal plays in a strategy. |
| seeds | integer | – | ask: how many top matches to expand from before re-ranking. |
| sibling_hops | boolean | – | 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 | – | Whether the thing is current or withdrawn. |
| to | string | – | path, paths: the destination node. |
| units | string | – | The unit an output is measured in. |
| why | string | – | neighbors, walk, ask: keep only edges whose own stated reason matches these words -- the same relation can carry different claims. |
No output schema declared.
No examples provided.
query_signal_behavior ~440
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.]
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | find: restrict to one family, e.g. oscillator, volatility, momentum |
| limit | integer | – | 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… |
| max_gap_bars | number | – | pick/find, TRIGGER only: median gap at most this many bars |
| max_gap_range_bars | number | – | gap_probability: high end of the gap range, inclusive (required) |
| max_rate | number | – | find: high end of the band, same units (required) |
| max_run_bars | number | – | pick/find, FILTER only: mean run at most this many bars |
| min_gap_bars | number | – | pick/find, TRIGGER only: median gap at least this many bars |
| min_gap_range_bars | number | – | gap_probability: low end of the gap range, inclusive (required) |
| min_rate | number | – | find: low end of the band, same units (required) |
| min_run_bars | number | – | pick/find, FILTER only: mean run at least this many bars |
| signal | string | – | Signal name, e.g. rsi_oversold. Required by describe, pick, gap_probability |
| signal_type | string | – | FILTER (an ongoing state) or TRIGGER (a one-bar event); measured separately |
| target_rate | number | – | pick: rate to aim for -- FILTER selectivity 0-1, TRIGGER firings per 1,000 bars. Omit to list the span |
No output schema declared.
No examples provided.
run_backtest ~487
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 substitute a feed. IT RETURNS A SUBMISSION, NOT A RESULT: a real backtest takes minutes, so this hands back the run's id and the config it will use, and the metrics arrive on their own once the engine finishes. Tell the person it is running; do not call this again for the same question, and do not wait. It consumes a unit of the user's monthly backtest allowance at submission -- so it CHECKS THE STRATEGY FIRST, and a refusal costs nothing: a problem (verify_strategy's problems) always refuses, and a signal parameter still at its library default refuses until you either save chosen values or pass acknowledge_defaults=true to stand by the defaults deliberately. One (strategy, window) is ONE measurement: submitting the same strategy over the same dates again is refused and the existing run named -- read that with get_backtest instead. Both start_date and end_date are required: name the days, so the same question asked next week gives the same answer. Every message carries the current time, so work them out from that. [Access: pay 0.10 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.]
| Name | Type | Req | Description |
|---|---|---|---|
| acknowledge_defaults | boolean | – | 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 | – | Only set when the person specifies an engine generation; omitted uses latest. |
| market_data_venue | string | – | Exact venue of the requested market. |
| quote_token | string | – | 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. |
No output schema declared.
No examples provided.
save_strategy ~772
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 asset, and the entry and exit signals you chose -- each one {name, params?, timeframe?}, with params defaulting from the library when omitted. DO NOT pass a signal's role: TRIGGER and FILTER are read from the library, and an entry must resolve to exactly one TRIGGER plus any number of FILTERs. Find real signal names with query_knowledge first; never invent one. The server checks the entry against the current market regime itself -- a strategy composed against the wrong regime is refused, and telling the person why is a better answer than saving it anyway. Pass constraints ONLY for values the person actually stated: they are kept exactly as given, while everything else comes from canon. Saving the same strategy twice returns the first one rather than making a duplicate, and says so in created. What you save is a DRAFT: not tradeable until a backtest of it meets the platform's threshold spec, and it leaves draft on its own when one does. [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.]
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | yes | Asset symbol, e.g. BTC or ETH. |
| constraints | object | – | 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 | – | The signals that open a position. Exactly one must be a TRIGGER in the knowledge graph; the rest are FILTERs. |
| exit_signals | array | – | The signals that close one, same shape. A strategy may have none, and then it exits on risk rules alone. |
| market_data_venue | string | – | Exact venue of the requested market. |
| quote_token | string | – | Quote currency of the requested market. |
| regime_direction | string | – | 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 | – | 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 | – | 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 | – | 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 t… |
| source_run_index | integer | – | 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 su… |
No output schema declared.
No examples provided.
screen_candidates ~293
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 that. Use it to choose which of many candidates to backtest first, never as a verdict on a single strategy -- a probability on its own says little, and the ranking is the answer. A HIGH score is real support for spending a backtest. A LOW score is weak evidence and is NOT a finding that the strategy will not trade: measured against runs that did trade, a 0.5 cutoff recovers under half of them. Never tell someone their strategy will not trade because this scored it low; back it and find out. [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.]
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | yes | Asset symbol, e.g. BTC or ETH. |
| candidates | array | yes | Each {entry: [{name, params?, timeframe?}], exit: [...]}. |
No output schema declared.
No examples provided.
screen_smart_money ~161
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 header) OR authenticate with an API key. An x402-capable client will auto-pay; API-key clients pay nothing per call.]
| Name | Type | Req | Description |
|---|---|---|---|
| chains | array | – | Optional list of chains to include. |
| limit | integer | – | Maximum results. |
| timeframe | string | – | Aggregation window, e.g. 24h, 7d. |
No output schema declared.
No examples provided.
search_marketplace ~823
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 listing was backtested in, and any sort key. Every filter is applied by the platform; do not fetch a page and filter it yourself. Counts cover the platform's own listings; the marketplace page also merges NexusTrade partner listings, which are not searchable or adoptable here -- say so plainly when a total is compared with the page, never guess at caching or filters. Use it whenever the person wants strategies to try, compare, or adopt -- 'find me a', 'what is on the marketplace', 'best Sharpe on ETH'. To adopt one, call propose_adopt with its strategy_id; never tell the person a strategy is theirs off the back of a search. [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.]
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | – | Asset symbol, e.g. BTC or ETH. |
| asset_class | array | – | 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 | – | Keep listings backtested in this market direction, e.g. bull, neutral or bear -- the band get_market_regime reports; or unclassified. |
| backtest_trend | string | – | Keep listings backtested in this trend character, e.g. clean, choppy; or unclassified. |
| backtest_volatility | string | – | Keep listings backtested in this volatility band, e.g. low, medium, high; or unclassified. |
| beats_all_benchmarks | boolean | – | Keep only listings whose return beat BTC, ETH and the S&P over their own window. |
| candle_size | string | – | Duration of one candle, e.g. 1h or 1d. |
| free_only | boolean | – | Keep only listings with no subscription price. |
| limit | integer | – | Maximum results. |
| max_drawdown_pct | number | – | Keep listings whose max drawdown is at or below this, in percent. |
| min_calmar_ratio | number | – | Keep listings at or above this Calmar ratio. |
| min_gain_to_pain_ratio | number | – | Keep listings at or above this gain-to-pain ratio. |
| min_irr_pct | number | – | Keep listings at or above this annualised IRR, in percent. |
| min_sharpe_ratio | number | – | Keep listings at or above this Sharpe ratio. |
| min_sortino_ratio | number | – | Keep listings at or above this Sortino ratio. |
| min_total_return_pct | number | – | Keep listings at or above this total return, in percent. |
| min_total_trades | integer | – | Keep listings with at least this many trades. |
| min_trades_per_week | number | – | Keep listings trading at least this often, per week. |
| min_win_rate_pct | number | – | Keep listings at or above this win rate, in percent. |
| offset | integer | – | Pagination offset in the result units documented by the tool; zero starts the first page. |
| order | string | – | desc for best-first on that metric, asc for worst-first. |
| risk_level | array | – | Keep listings at any of these risk levels, e.g. low, medium, high. |
| search | string | – | Free text matched against listing name, description and creator. |
| sort | string | – | The column to order by. Omitted, the marketplace's trending order. |
No output schema declared.
No examples provided.
search_signals ~133
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.]
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | Signal library module |
| limit | integer | – | Maximum results |
| offset | integer | – | Pagination offset |
| query | string | yes | Search query string |
| regime_direction | string | – | Market regime band |
| role | string | – | Signal role |
| search_type | string | – | Type of search |
No output schema declared.
No examples provided.
update_strategy ~439
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 results stay attached to the rules they ran, and a change means saving a NEW strategy with save_strategy. Use this to act on verify_strategy's warnings without creating a duplicate. [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.]
| Name | Type | Req | Description |
|---|---|---|---|
| constraints | object | – | 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 | – | The signals that open a position. Exactly one must be a TRIGGER in the knowledge graph; the rest are FILTERs. |
| exit_signals | array | – | The signals that close one, same shape. A strategy may have none, and then it exits on risk rules alone. |
| regime_direction | string | – | 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 | – | 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 | – | 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 su… |
No output schema declared.
No examples provided.
update_strategy_status ~79
Update the status of a strategy. Valid statuses: draft, inactive, paper, live, archived. Use this when the user wants to activate, pause, archive, or promote a strategy (e.g. 'pause my BTC strategy', 'archive the old ETH strategy').
| Name | Type | Req | Description |
|---|---|---|---|
| new_status | string | yes | – |
| strategy_id | string | yes | – |
No output schema declared.
No examples provided.
validate_signal_params ~78
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.]
| Name | Type | Req | Description |
|---|---|---|---|
| parameters | object | – | – |
| signal_name | string | yes | Signal name |
No output schema declared.
No examples provided.
verify_strategy ~200
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 nothing measured. It reads what is STORED, so it answers for the strategy as it exists rather than as it was described. `warnings` are judgements it cannot make for you -- a parameter still at its library default -- and do not stop a run. [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.]
| Name | Type | Req | Description |
|---|---|---|---|
| strategy_id | string | yes | The strategy's UUID. |
No output schema declared.
No examples provided.
How do I install the MangroveAI MCP server?
MangroveAI is a hosted endpoint at https://api.mangrovedeveloper.ai/mcp/, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · api.mangrovedeveloper.ai
claude mcp add --transport http mangrovetechnologies-mangroveai 'https://api.mangrovedeveloper.ai/mcp/'
What is the MangroveAI MCP server?
MangroveAI is an MCP server listed in the public MCP registry as io.github.MangroveTechnologies/mangroveai. Backtest and paper-trade crypto strategies. Free API key or pay per call in USDC (x402). This page covers its hosted endpoint (https://api.mangrovedeveloper.ai/mcp/).
Is the MangroveAI MCP server safe to use?
MangroveAI scores 62 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the MangroveAI MCP server expose?
MangroveAI exposes 76 tools: delete_strategy, update_strategy_status, get_trades_for_strategy, list_positions, evaluate_strategy, and 71 more. Their descriptions and schemas cost roughly 16,545 tokens of context every time the server is loaded.
Does the MangroveAI MCP server require authentication?
No. We connected to MangroveAI without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the MangroveAI MCP server still maintained?
MangroveAI is still listed as active in the MCP registry. We last reached this channel on 23 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.