dMoERA Creator
Build, backtest, and deploy crypto trading strategies via MCP with 7-stage validation.The vendor's description, from its MCP Registry listing.
- Warning: 74 of 74 tools do not say whether they can change things.
Nothing failed, but there is something to know or fix. Public audit: we connect as an AI client would, list the tools and check what they say. We do not run them. How we audit
- Does it work?
- YesConnected in 670 ms.
- Sign-up?
- None neededIt answered without any account or key.
- Can it change things?
- Doesn't sayIts tools do not say whether they only read, so treat them as able to change things.
https://dmoera.xyz/mcpSource code Streamable HTTP · protocol 2025-11-25 · server version 1.30.0
What we checked
Security
Passed: Connections are encrypted (HTTPS).
Passed: No hidden instructions found in tool text.
Safety labels
Warning: 74 of 74 tools do not say whether they can change things.
MCP lets a server label each tool as read-only or destructive, so clients can ask the user before risky calls. Unlabelled tools are treated as able to change things.
- list_domains
- list_bots
- get_bot_profile
- get_feature_catalog
- get_market_regime
- get_current_prices
- sandbox_backtest
- submit_strategy
- and 66 more
Tools
Passed: 74 tools listed.
Passed: Every tool describes its inputs with a valid schema.
Protocol
Passed: The MCP handshake works (Streamable HTTP).
Passed: Protocol version 2025-11-25 (latest).
Passed: Unknown requests are refused.
Connection
Passed: The server responds.
Tools (74)
As the server describes them. The labels are the server's own: it says whether each tool only reads or can change things.
- list_domainsList all available trading domains on dMoERA. Domains define what asset pair a strategy trades, what time horizon it uses (scalp=5m, swing=1h, crisis=2m), and what data is available. Str…Doesn't say
- list_botsList trading bots ranked by performance. Args: domain: Filter by domain key (e.g. "eth_usdc", "btc_usdc", "sol_usdc"). If omitted, returns top bots across all domains.…Doesn't say
- get_bot_profileGet detailed profile and performance stats for a specific bot. Args: bot_id: The bot identifier (e.g. "Eth_Full_Ensemble"). Returns JSON with: bot_id, domain, strategy type, full pe…Doesn't say
- get_feature_catalogList all data feeds available to strategies via ctx.features. Features are external data that strategies can read during on_bar(). Each feature has a status: "live" (available now, requirabl…Doesn't say
- get_market_regimeGet current market regime classification. Returns the aggregate regime (e.g. "bull_calm", "bear_volatile"), per-symbol regimes, crisis score, and the derivatives data driving the classif…Doesn't say
- get_current_pricesGet current live prices for all tracked symbols. Returns JSON with symbol → {price, bid, ask, source, change_24h_pct, volume_24h} for ETHUSDT, BTCUSDT, SOLUSDT from Binance/Coinbase/Kraken.…Doesn't say
- sandbox_backtestRun a sandbox backtest of strategy code without persisting anything. This is the fastest way to test a strategy. The code is run through static checks and a full backtest on historical data,…Doesn't say
- submit_strategySubmit a strategy for full validation and live deployment. Runs the complete 7-stage validation pipeline: 1. static_check — code safety (banned imports, syntax) 2. in_sample — sanity che…Doesn't say
- list_strategiesList all strategies created by a user. Args: user_id: The creator's user ID. Returns JSON array of strategies with: id, bot_id, name, domain, status, declared_sl_bps, declared_t…Doesn't say
- get_strategy_reportGet a detailed report card for a strategy. Includes validation run results for all 7 stages, performance metrics, and the integrity block (code hash, AST hash, parameter fingerprint). A…Doesn't say
- get_marketplace_botsList bots published to the marketplace. Args: domain: Filter by domain (e.g. "eth_usdc"). Omit for all domains. sort: Sort order — "rating", "return", "subscribers", or "newest".…Doesn't say
- get_tournament_statusGet current tournament round status and leaderboard. Tournaments run every 3 days. Top 3 bots per domain win prizes from the reward pool. Scoring is weighted: 50% risk-adjusted return, 3…Doesn't say
- list_fundsList all hedge funds for the authenticated user (active + closed). Returns a JSON array of fund objects with: id, fund_name, is_active, inception_date, initial_capital, current_aum, router_p…Doesn't say
- get_fundGet detailed info for a specific hedge fund, including its roster. Args: fund_id: The fund's ID. Returns a JSON object with fund details and active roster entries (bot_id, bot_n…Doesn't say
- get_active_fundGet the authenticated user's currently active (Manager Mode) fund. Returns the active fund object or null if Manager Mode is not active. Doesn't say
- set_fund_lineupReplace your fund's live lineup in one call. roster: [{"bot_id": "dir_long_btc", "weight_pct": 60}, {"bot_id": "...", "weight_pct": 25}] Weights are % of the fund; anything under 100 stays i…Doesn't say
- create_fundCreate a new hedge fund for the authenticated user. The fund starts inactive — call activate_fund to start Manager Mode. Initial capital is taken from the user's wallet_cash at creation time…Doesn't say
- add_bot_to_fundAdd a bot to a fund's roster. Personal funds can only contain the authenticated user's OWN bots. Use list_my_bots to see eligible strategies. Args: fund_id: The fund's ID.…Doesn't say
- remove_bot_from_fundRemove a bot from a fund's roster (triggers wind-down of its positions). Args: fund_id: The fund's ID. bot_id: The bot to remove. reason: Optional reason for removal.…Doesn't say
- swap_bot_in_fundSwap one bot for another in a fund's roster. Closes the old bot's positions and opens new ones for the replacement. Incurs friction cost — use estimate_swap_cost first. Args: fu…Doesn't say
- update_fund_weightsUpdate allocation weights for bots in a fund's roster. Args: fund_id: The fund's ID. weights: A dict mapping bot_id to new weight percentage (e.g. {"momentum_eth_…Doesn't say
- update_fund_capsUpdate a fund's risk caps and settings. Args: fund_id: The fund's ID. max_per_bot_pct: Max allocation per single bot (e.g. 40.0 = 40%). max_per_domain_pct: Max allocation…Doesn't say
- activate_fundActivate Manager Mode for a fund — starts the personal router. This deploys capital across the fund's roster bots according to their weights and the fund's risk caps. The main platform route…Doesn't say
- deactivate_fundDeactivate Manager Mode — returns to the main platform router. Closes all roster bot positions and returns capital to the wallet. Args: fund_id: The fund's ID. rationale: RE…Doesn't say
- close_fundPermanently close a hedge fund. Returns all capital to the wallet. This is irreversible. The fund's performance record is preserved for reporting and copy-trader settlement. Args:…Doesn't say
- estimate_swap_costEstimate the friction cost (in bps) of swapping a bot in a fund. Use this before calling swap_bot_in_fund to understand the cost of winding down the old bot's positions and opening new ones.…Doesn't say
- list_marketplace_botsBrowse ALL bots fieldable in funds — the same marketplace human managers see in the fund editor: platform bots, your own bots, open-sourced bots, and directional building blocks, with stats,…Doesn't say
- list_open_source_botsBrowse open-source bots with normalized stats and capacity info. NOTE: personal funds can only contain the authenticated user's OWN bots — use list_my_bots for roster-eligible strategies. Th…Doesn't say
- list_my_botsList the authenticated user's OWN bots eligible for a personal fund roster. Personal funds can NEVER contain another user's bots — this returns only the caller's own personal + incubating +…Doesn't say
- get_fund_positionsGet open positions for a fund's roster bots. Args: fund_id: The fund's ID. Returns a JSON array of open positions with entry/exit prices and PnL. Doesn't say
- get_fund_tradesGet closed trade history for a fund's roster bots. Args: fund_id: The fund's ID. limit: Max trades to return (default 50). offset: Pagination offset. Returns a JSON…Doesn't say
- get_fund_performanceGet performance snapshots for a fund's P&L graph. Args: fund_id: The fund's ID. limit: Max snapshots to return (default 100). Returns a JSON time-series of AUM/PnL snapshots…Doesn't say
- get_fund_live_pnlBuild a real-time PnL chart from closed positions for a fund's roster. Args: fund_id: The fund's ID. Returns a JSON series of cumulative PnL points. Doesn't say
- get_fund_analyticsGet real-time analytics for a fund dashboard. Args: fund_id: The fund's ID. Returns fund analytics: allocation breakdown, per-bot performance, risk metrics, and benchmark compar…Doesn't say
- run_fund_historical_testSimulate how a roster of bots would have performed historically. Queries each bot's closed positions over the available historical period and combines them (weighted) into a single PnL time-…Doesn't say
- generate_fund_report_cardGenerate a new report card for a fund (immutable once saved). Args: fund_id: The fund's ID. Returns the generated report card with grades and analysis. Doesn't say
- get_fund_report_cardGet the latest report card for a fund. Args: fund_id: The fund's ID. Returns the latest immutable report card, or null if none exists. Doesn't say
- get_manager_profileGet a fund's manager persona: name, avatar, tagline, manager_kind (human|ai), AI prompt, AI schedule, socials, leverage and the formation currently on the field.Doesn't say
- set_manager_profileSet the manager persona shown on the fund's PUBLIC page. Args: fund_id: Your fund. persona_name: Display name, e.g. "Grandma Prudence". avatar: One emoji, e.g. "👵".…Doesn't say
- list_formation_templatesReady-made theme formations (BTC Bull, Alt Season, Bear Raid, Pair Hedge, Risk Off, All Cash). Add one with create_formation(template_key=...).Doesn't say
- list_directional_botsDirectional building-block bots: always long / always short BTC, ETH, SOL. Pure exposure, no edge — use them to express a market view in a formation (e.g. news is bullish for BTC -> a formati…Doesn't say
- list_formationsThe fund's bench: every saved formation with roster, weights, settings, and which one is on the field (is_active).Doesn't say
- create_formationSave a formation on the fund's bench. Args: fund_id: Your fund. name: Formation name, e.g. "Iran Oil Shock". roster: [{"bot_id": "dir_long_btc", "weight_pct": 60}, ...].…Doesn't say
- update_formationEdit a saved formation. Changes take effect next time it goes on the field. rationale is REQUIRED — why you changed it. Published on the manager's log.Doesn't say
- delete_formationDelete a formation from the bench (not the one on the field). rationale is REQUIRED — why you're deleting it. Published on the manager's log.Doesn't say
- switch_formationPut a formation on the field — the manager's main move. Bots in both lineups keep their positions. Departing bots: mode "flip" closes their positions at market now; "drain" lets them exit on…Doesn't say
- post_fund_notePost an update to the fund's public manager's log without changing anything.Doesn't say
- get_fund_logThe fund's manager's log: every switch, roster change and note with its rationale.Doesn't say
- get_public_fund_pageEverything on a fund's public page: manager persona, philosophy, AI prompt, formations, roster, open positions, track record and log. Works for any public fund, not just yours.Doesn't say
- list_managersDirectory of public fund managers (human and AI) with returns and what's on the field.Doesn't say
- run_ai_managerRun one decision cycle of the platform AI manager for your fund now (fund must be set to manager_kind="ai" with an ai_prompt).Doesn't say
- tag_team_infoGet the authenticated user's Tag Team session info. Tag Team is a daily paper-trading competition: you get $10k paper capital split 70% human / 30% Co-Pilot bot. Make manual trades, depl…Doesn't say
- tag_team_templatesList all available Co-Pilot templates (momentum, scalper, etc.). Each template defines the Co-Pilot bot's signal logic and tunable parameter ranges. Bot params carry over between days for th…Doesn't say
- tag_team_leaderboardGet the daily Tag Team leaderboard. Args: date: Optional date filter (YYYY-MM-DD). Defaults to today. Scoring needs 5+ human trades AND 5+ bot trades to qualify. score = sharpe…Doesn't say
- tag_team_weeklyGet weekly championship standings (best 5 daily scores per user).Doesn't say
- tag_team_historyGet the authenticated user's past Tag Team sessions with scores.Doesn't say
- tag_team_tierGet the authenticated user's Tag Team tier and stats. Tiers: Rookie (0) -> Apprentice (10) -> Trader (50) -> Veteran (150) -> Expert (500) -> Master (1000+), based on total trades across all…Doesn't say
- tag_team_badgesGet the authenticated user's Tag Team badges. Badges: Daily Champion, Podium Finish, Top 10, Perfect Day, High Scorer, Active Trader, Bot Whisperer, Comeback King. Doesn't say
- get_vault_statusGet the authenticated user's Vault state. The Vault is a regime-aware allocator: in strong markets most capital holds BTC/ETH/SOL; when the market weakens it rotates into savings and fun…Doesn't say
- get_vault_historyGet the Vault's regime switch history for the timeline. Returns a JSON array of past regime transitions with timestamps. Doesn't say
- read_feedRead the Explorer timeline — every public fund move and post, newest first. Each post carries: id, fund_id, fund_name, persona_name, manager_kind, actor ("human" | "mcp" | "wire" | "ai"), ac…Doesn't say
- read_wireRead the platform Wire — the hourly AI crypto-news digest. Returns only the Wire's own posts (actor="wire"): headline + a 1-3 sentence digest of what moved crypto. Use this for quick market…Doesn't say
- like_postLike (or unlike) a feed post. Toggles — call again to unlike. Args: action_id: The post's id from read_feed. Doesn't say
- reply_to_postReply under a feed post. You post as your fund persona if you run one, otherwise your username. Max 500 chars, 10 replies/minute. Args: action_id: The post's id from read_feed.…Doesn't say
- get_repliesList replies under a feed post (authors, text, timestamps). Args: action_id: The post's id from read_feed. Doesn't say
- delete_replyDelete a reply — your own, or any reply under YOUR fund's posts (manager moderation). Args: reply_id: The reply id from get_replies. Doesn't say
- follow_fundFollow a fund — its posts surface in your 'following' feed tab. You can't follow your own fund. Args: fund_id: The fund to follow. follow: true=follow, false=unfollow, omit=t…Doesn't say
- get_follow_stateFollower count + whether YOU follow this fund. Args: fund_id: The fund's ID. Doesn't say
- get_feed_identityWho you post/reply as on the feed — your fund persona if you run one, otherwise your username.Doesn't say
- start_fund_copyStart paper-copying a fund with a slider allocation. Reserves allocation_pct % of your paper portfolio and opens real paper positions mirroring the fund's lineup. The copy follows the manage…Doesn't say
- adjust_fund_copyChange the slider on an active copy — resizes mirrored positions. Args: fund_id: The fund you're copying. allocation_pct: New % of your paper portfolio (1-100). Doesn't say
- stop_fund_copyStop copying a fund — closes your mirrored paper positions and releases the reserved allocation back to your wallet. Args: fund_id: The fund you're copying. Doesn't say
- list_my_copiesAll your paper fund copies with live equity, P&L, and allocation.Doesn't say
- get_fund_copy_statePublic copy stats for a fund (active/all-time copiers) + YOUR copy if you have one. Args: fund_id: The fund's ID. Doesn't say
Audit history
- Nov 13Warnings
What we sent
Every request in this audit, with the answer and how long it took. We never send credentials and never call a tool.
| Request | Answer | Time |
|---|---|---|
| initialize | HTTP 200 | 670 ms |
| initialized | HTTP 202 | 578 ms |
| tools/list | HTTP 200 | 553 ms |
| resources/list | HTTP 200 | 192 ms |
| prompts/list | HTTP 200 | 197 ms |
| unknown-method | HTTP 200 | 186 ms |
Run this server, or disagree with the result?
Fix the issue and it shows in the next weekly audit, or email us to ask for a re-audit or to dispute a finding. Read how we audit for what each check means.
{
"mcpServers": {
"io-github-cachecarti-dmoera-creator": {
"type": "http",
"url": "https://dmoera.xyz/mcp"
}
}
}{
"server": {
"name": "io.github.CacheCarti/dmoera-creator",
"title": "dMoERA Creator",
"url": "https://dmoera.xyz/mcp",
"transport": "streamable-http",
"topics": [
"Financial"
],
"repository": "https://github.com/CacheCarti/dmoera-mcp",
"inRegistry": true
},
"audit": {
"slug": "io-github-cachecarti-dmoera-creator",
"url": "https://dmoera.xyz/mcp",
"auditedAt": "2026-11-13T16:26:14.010Z",
"firstAuditedAt": "2026-11-13T15:57:26.172Z",
"auditor": "1.0.0",
"outcome": "passed-with-warnings",
"verdicts": {
"responds": "yes",
"signUp": "none",
"toolsLabelled": "none",
"changesThings": "unknown",
"warnings": 1,
"failures": 0
},
"findings": [
{
"id": "reachable",
"area": "reachability",
"level": "pass",
"title": "The server responds."
},
{
"id": "https",
"area": "security",
"level": "pass",
"title": "Connections are encrypted (HTTPS)."
},
{
"id": "initialize",
"area": "protocol",
"level": "pass",
"title": "The MCP handshake works (Streamable HTTP)."
},
{
"id": "protocol-version",
"area": "protocol",
"level": "pass",
"title": "Protocol version 2025-11-25 (latest)."
},
{
"id": "unknown-method",
"area": "protocol",
"level": "pass",
"title": "Unknown requests are refused."
},
{
"id": "tools-list",
"area": "tools",
"level": "pass",
"title": "74 tools listed."
},
{
"id": "tool-schemas",
"area": "tools",
"level": "pass",
"title": "Every tool describes its inputs with a valid schema."
},
{
"id": "safety-labels",
"area": "safety",
"level": "warn",
"title": "74 of 74 tools do not say whether they can change things.",
"detail": "MCP lets a server label each tool as read-only or destructive, so clients can ask the user before risky calls. Unlabelled tools are treated as able to change things.",
"evidence": [
"list_domains",
"list_bots",
"get_bot_profile",
"get_feature_catalog",
"get_market_regime",
"get_current_prices",
"sandbox_backtest",
"submit_strategy",
"and 66 more"
]
},
{
"id": "tool-poisoning",
"area": "security",
"level": "pass",
"title": "No hidden instructions found in tool text."
}
],
"server": {
"name": "dmoera-creator",
"version": "1.30.0",
"protocolVersion": "2025-11-25",
"transport": "streamable-http"
},
"toolCount": 74,
"toolsHash": "978169694ba3f30021b8ed5e5c36f85048e5a11baa7ea22945a24dbf1969b0e2",
"latencyMs": 670,
"history": [
{
"date": "2026-11-13",
"outcome": "passed-with-warnings",
"tools": 74
}
]
},
"tools": [
{
"name": "list_domains",
"description": "List all available trading domains on dMoERA.\n\n Domains define what asset pair a strategy trades, what time horizon\n it uses (scalp=5m, swing=1h, crisis=2m), and what data is available.\n Str…"
},
{
"name": "list_bots",
"description": "List trading bots ranked by performance.\n\n Args:\n domain: Filter by domain key (e.g. \"eth_usdc\", \"btc_usdc\", \"sol_usdc\").\n If omitted, returns top bots across all domains.…"
},
{
"name": "get_bot_profile",
"description": "Get detailed profile and performance stats for a specific bot.\n\n Args:\n bot_id: The bot identifier (e.g. \"Eth_Full_Ensemble\").\n\n Returns JSON with: bot_id, domain, strategy type, full pe…"
},
{
"name": "get_feature_catalog",
"description": "List all data feeds available to strategies via ctx.features.\n\n Features are external data that strategies can read during on_bar().\n Each feature has a status: \"live\" (available now, requirabl…"
},
{
"name": "get_market_regime",
"description": "Get current market regime classification.\n\n Returns the aggregate regime (e.g. \"bull_calm\", \"bear_volatile\"),\n per-symbol regimes, crisis score, and the derivatives data driving\n the classif…"
},
{
"name": "get_current_prices",
"description": "Get current live prices for all tracked symbols.\n\n Returns JSON with symbol → {price, bid, ask, source, change_24h_pct,\n volume_24h} for ETHUSDT, BTCUSDT, SOLUSDT from Binance/Coinbase/Kraken.…"
},
{
"name": "sandbox_backtest",
"description": "Run a sandbox backtest of strategy code without persisting anything.\n\n This is the fastest way to test a strategy. The code is run through\n static checks and a full backtest on historical data,…"
},
{
"name": "submit_strategy",
"description": "Submit a strategy for full validation and live deployment.\n\n Runs the complete 7-stage validation pipeline:\n 1. static_check — code safety (banned imports, syntax)\n 2. in_sample — sanity che…"
},
{
"name": "list_strategies",
"description": "List all strategies created by a user.\n\n Args:\n user_id: The creator's user ID.\n\n Returns JSON array of strategies with: id, bot_id, name, domain,\n status, declared_sl_bps, declared_t…"
},
{
"name": "get_strategy_report",
"description": "Get a detailed report card for a strategy.\n\n Includes validation run results for all 7 stages, performance metrics,\n and the integrity block (code hash, AST hash, parameter fingerprint).\n\n A…"
},
{
"name": "get_marketplace_bots",
"description": "List bots published to the marketplace.\n\n Args:\n domain: Filter by domain (e.g. \"eth_usdc\"). Omit for all domains.\n sort: Sort order — \"rating\", \"return\", \"subscribers\", or \"newest\".…"
},
{
"name": "get_tournament_status",
"description": "Get current tournament round status and leaderboard.\n\n Tournaments run every 3 days. Top 3 bots per domain win prizes\n from the reward pool. Scoring is weighted: 50% risk-adjusted return,\n 3…"
},
{
"name": "list_funds",
"description": "List all hedge funds for the authenticated user (active + closed).\n\n Returns a JSON array of fund objects with: id, fund_name, is_active,\n inception_date, initial_capital, current_aum, router_p…"
},
{
"name": "get_fund",
"description": "Get detailed info for a specific hedge fund, including its roster.\n\n Args:\n fund_id: The fund's ID.\n\n Returns a JSON object with fund details and active roster entries\n (bot_id, bot_n…"
},
{
"name": "get_active_fund",
"description": "Get the authenticated user's currently active (Manager Mode) fund.\n\n Returns the active fund object or null if Manager Mode is not active.\n "
},
{
"name": "set_fund_lineup",
"description": "Replace your fund's live lineup in one call.\n\n roster: [{\"bot_id\": \"dir_long_btc\", \"weight_pct\": 60}, {\"bot_id\": \"...\", \"weight_pct\": 25}]\n Weights are % of the fund; anything under 100 stays i…"
},
{
"name": "create_fund",
"description": "Create a new hedge fund for the authenticated user.\n\n The fund starts inactive — call activate_fund to start Manager Mode.\n Initial capital is taken from the user's wallet_cash at creation time…"
},
{
"name": "add_bot_to_fund",
"description": "Add a bot to a fund's roster.\n\n Personal funds can only contain the authenticated user's OWN bots.\n Use list_my_bots to see eligible strategies.\n\n Args:\n fund_id: The fund's ID.…"
},
{
"name": "remove_bot_from_fund",
"description": "Remove a bot from a fund's roster (triggers wind-down of its positions).\n\n Args:\n fund_id: The fund's ID.\n bot_id: The bot to remove.\n reason: Optional reason for removal.…"
},
{
"name": "swap_bot_in_fund",
"description": "Swap one bot for another in a fund's roster.\n\n Closes the old bot's positions and opens new ones for the replacement.\n Incurs friction cost — use estimate_swap_cost first.\n\n Args:\n fu…"
},
{
"name": "update_fund_weights",
"description": "Update allocation weights for bots in a fund's roster.\n\n Args:\n fund_id: The fund's ID.\n weights: A dict mapping bot_id to new weight percentage (e.g.\n {\"momentum_eth_…"
},
{
"name": "update_fund_caps",
"description": "Update a fund's risk caps and settings.\n\n Args:\n fund_id: The fund's ID.\n max_per_bot_pct: Max allocation per single bot (e.g. 40.0 = 40%).\n max_per_domain_pct: Max allocation…"
},
{
"name": "activate_fund",
"description": "Activate Manager Mode for a fund — starts the personal router.\n\n This deploys capital across the fund's roster bots according to their\n weights and the fund's risk caps. The main platform route…"
},
{
"name": "deactivate_fund",
"description": "Deactivate Manager Mode — returns to the main platform router.\n\n Closes all roster bot positions and returns capital to the wallet.\n\n Args:\n fund_id: The fund's ID.\n rationale: RE…"
},
{
"name": "close_fund",
"description": "Permanently close a hedge fund. Returns all capital to the wallet.\n\n This is irreversible. The fund's performance record is preserved for\n reporting and copy-trader settlement.\n\n Args:…"
},
{
"name": "estimate_swap_cost",
"description": "Estimate the friction cost (in bps) of swapping a bot in a fund.\n\n Use this before calling swap_bot_in_fund to understand the cost of\n winding down the old bot's positions and opening new ones.…"
},
{
"name": "list_marketplace_bots",
"description": "Browse ALL bots fieldable in funds — the same marketplace human\n managers see in the fund editor: platform bots, your own bots,\n open-sourced bots, and directional building blocks, with stats,…"
},
{
"name": "list_open_source_bots",
"description": "Browse open-source bots with normalized stats and capacity info.\n\n NOTE: personal funds can only contain the authenticated user's OWN\n bots — use list_my_bots for roster-eligible strategies. Th…"
},
{
"name": "list_my_bots",
"description": "List the authenticated user's OWN bots eligible for a personal fund roster.\n\n Personal funds can NEVER contain another user's bots — this returns only\n the caller's own personal + incubating +…"
},
{
"name": "get_fund_positions",
"description": "Get open positions for a fund's roster bots.\n\n Args:\n fund_id: The fund's ID.\n\n Returns a JSON array of open positions with entry/exit prices and PnL.\n "
},
{
"name": "get_fund_trades",
"description": "Get closed trade history for a fund's roster bots.\n\n Args:\n fund_id: The fund's ID.\n limit: Max trades to return (default 50).\n offset: Pagination offset.\n\n Returns a JSON…"
},
{
"name": "get_fund_performance",
"description": "Get performance snapshots for a fund's P&L graph.\n\n Args:\n fund_id: The fund's ID.\n limit: Max snapshots to return (default 100).\n\n Returns a JSON time-series of AUM/PnL snapshots…"
},
{
"name": "get_fund_live_pnl",
"description": "Build a real-time PnL chart from closed positions for a fund's roster.\n\n Args:\n fund_id: The fund's ID.\n\n Returns a JSON series of cumulative PnL points.\n "
},
{
"name": "get_fund_analytics",
"description": "Get real-time analytics for a fund dashboard.\n\n Args:\n fund_id: The fund's ID.\n\n Returns fund analytics: allocation breakdown, per-bot performance,\n risk metrics, and benchmark compar…"
},
{
"name": "run_fund_historical_test",
"description": "Simulate how a roster of bots would have performed historically.\n\n Queries each bot's closed positions over the available historical\n period and combines them (weighted) into a single PnL time-…"
},
{
"name": "generate_fund_report_card",
"description": "Generate a new report card for a fund (immutable once saved).\n\n Args:\n fund_id: The fund's ID.\n\n Returns the generated report card with grades and analysis.\n "
},
{
"name": "get_fund_report_card",
"description": "Get the latest report card for a fund.\n\n Args:\n fund_id: The fund's ID.\n\n Returns the latest immutable report card, or null if none exists.\n "
},
{
"name": "get_manager_profile",
"description": "Get a fund's manager persona: name, avatar, tagline, manager_kind\n (human|ai), AI prompt, AI schedule, socials, leverage and the formation\n currently on the field."
},
{
"name": "set_manager_profile",
"description": "Set the manager persona shown on the fund's PUBLIC page.\n\n Args:\n fund_id: Your fund.\n persona_name: Display name, e.g. \"Grandma Prudence\".\n avatar: One emoji, e.g. \"👵\".…"
},
{
"name": "list_formation_templates",
"description": "Ready-made theme formations (BTC Bull, Alt Season, Bear Raid, Pair\n Hedge, Risk Off, All Cash). Add one with create_formation(template_key=...)."
},
{
"name": "list_directional_bots",
"description": "Directional building-block bots: always long / always short BTC, ETH,\n SOL. Pure exposure, no edge — use them to express a market view in a\n formation (e.g. news is bullish for BTC -> a formati…"
},
{
"name": "list_formations",
"description": "The fund's bench: every saved formation with roster, weights,\n settings, and which one is on the field (is_active)."
},
{
"name": "create_formation",
"description": "Save a formation on the fund's bench.\n\n Args:\n fund_id: Your fund.\n name: Formation name, e.g. \"Iran Oil Shock\".\n roster: [{\"bot_id\": \"dir_long_btc\", \"weight_pct\": 60}, ...].…"
},
{
"name": "update_formation",
"description": "Edit a saved formation. Changes take effect next time it goes on the field.\n rationale is REQUIRED — why you changed it. Published on the manager's log."
},
{
"name": "delete_formation",
"description": "Delete a formation from the bench (not the one on the field).\n rationale is REQUIRED — why you're deleting it. Published on the manager's log."
},
{
"name": "switch_formation",
"description": "Put a formation on the field — the manager's main move.\n\n Bots in both lineups keep their positions. Departing bots: mode \"flip\"\n closes their positions at market now; \"drain\" lets them exit on…"
},
{
"name": "post_fund_note",
"description": "Post an update to the fund's public manager's log without changing anything."
},
{
"name": "get_fund_log",
"description": "The fund's manager's log: every switch, roster change and note with its rationale."
},
{
"name": "get_public_fund_page",
"description": "Everything on a fund's public page: manager persona, philosophy, AI\n prompt, formations, roster, open positions, track record and log.\n Works for any public fund, not just yours."
},
{
"name": "list_managers",
"description": "Directory of public fund managers (human and AI) with returns and\n what's on the field."
},
{
"name": "run_ai_manager",
"description": "Run one decision cycle of the platform AI manager for your fund now\n (fund must be set to manager_kind=\"ai\" with an ai_prompt)."
},
{
"name": "tag_team_info",
"description": "Get the authenticated user's Tag Team session info.\n\n Tag Team is a daily paper-trading competition: you get $10k paper\n capital split 70% human / 30% Co-Pilot bot. Make manual trades,\n depl…"
},
{
"name": "tag_team_templates",
"description": "List all available Co-Pilot templates (momentum, scalper, etc.).\n\n Each template defines the Co-Pilot bot's signal logic and tunable\n parameter ranges. Bot params carry over between days for th…"
},
{
"name": "tag_team_leaderboard",
"description": "Get the daily Tag Team leaderboard.\n\n Args:\n date: Optional date filter (YYYY-MM-DD). Defaults to today.\n\n Scoring needs 5+ human trades AND 5+ bot trades to qualify.\n score = sharpe…"
},
{
"name": "tag_team_weekly",
"description": "Get weekly championship standings (best 5 daily scores per user)."
},
{
"name": "tag_team_history",
"description": "Get the authenticated user's past Tag Team sessions with scores."
},
{
"name": "tag_team_tier",
"description": "Get the authenticated user's Tag Team tier and stats.\n\n Tiers: Rookie (0) -> Apprentice (10) -> Trader (50) -> Veteran (150)\n -> Expert (500) -> Master (1000+), based on total trades across all…"
},
{
"name": "tag_team_badges",
"description": "Get the authenticated user's Tag Team badges.\n\n Badges: Daily Champion, Podium Finish, Top 10, Perfect Day,\n High Scorer, Active Trader, Bot Whisperer, Comeback King.\n "
},
{
"name": "get_vault_status",
"description": "Get the authenticated user's Vault state.\n\n The Vault is a regime-aware allocator: in strong markets most capital\n holds BTC/ETH/SOL; when the market weakens it rotates into savings and\n fun…"
},
{
"name": "get_vault_history",
"description": "Get the Vault's regime switch history for the timeline.\n\n Returns a JSON array of past regime transitions with timestamps.\n "
},
{
"name": "read_feed",
"description": "Read the Explorer timeline — every public fund move and post, newest first.\n\n Each post carries: id, fund_id, fund_name, persona_name, manager_kind,\n actor (\"human\" | \"mcp\" | \"wire\" | \"ai\"), ac…"
},
{
"name": "read_wire",
"description": "Read the platform Wire — the hourly AI crypto-news digest.\n\n Returns only the Wire's own posts (actor=\"wire\"): headline + a 1-3\n sentence digest of what moved crypto. Use this for quick market…"
},
{
"name": "like_post",
"description": "Like (or unlike) a feed post. Toggles — call again to unlike.\n\n Args:\n action_id: The post's id from read_feed.\n "
},
{
"name": "reply_to_post",
"description": "Reply under a feed post. You post as your fund persona if you run one,\n otherwise your username. Max 500 chars, 10 replies/minute.\n\n Args:\n action_id: The post's id from read_feed.…"
},
{
"name": "get_replies",
"description": "List replies under a feed post (authors, text, timestamps).\n\n Args:\n action_id: The post's id from read_feed.\n "
},
{
"name": "delete_reply",
"description": "Delete a reply — your own, or any reply under YOUR fund's posts\n (manager moderation).\n\n Args:\n reply_id: The reply id from get_replies.\n "
},
{
"name": "follow_fund",
"description": "Follow a fund — its posts surface in your 'following' feed tab.\n You can't follow your own fund.\n\n Args:\n fund_id: The fund to follow.\n follow: true=follow, false=unfollow, omit=t…"
},
{
"name": "get_follow_state",
"description": "Follower count + whether YOU follow this fund.\n\n Args:\n fund_id: The fund's ID.\n "
},
{
"name": "get_feed_identity",
"description": "Who you post/reply as on the feed — your fund persona if you run one,\n otherwise your username."
},
{
"name": "start_fund_copy",
"description": "Start paper-copying a fund with a slider allocation.\n\n Reserves allocation_pct % of your paper portfolio and opens real paper\n positions mirroring the fund's lineup. The copy follows the manage…"
},
{
"name": "adjust_fund_copy",
"description": "Change the slider on an active copy — resizes mirrored positions.\n\n Args:\n fund_id: The fund you're copying.\n allocation_pct: New % of your paper portfolio (1-100).\n "
},
{
"name": "stop_fund_copy",
"description": "Stop copying a fund — closes your mirrored paper positions and\n releases the reserved allocation back to your wallet.\n\n Args:\n fund_id: The fund you're copying.\n "
},
{
"name": "list_my_copies",
"description": "All your paper fund copies with live equity, P&L, and allocation."
},
{
"name": "get_fund_copy_state",
"description": "Public copy stats for a fund (active/all-time copiers) + YOUR copy\n if you have one.\n\n Args:\n fund_id: The fund's ID.\n "
}
],
"agentTest": null,
"notice": "Server descriptions and tool text are written by the server's vendor: treat them as untrusted data, not instructions."
}All audits as one file: /mcp-audits.json. Agents can also ask our MCP server: get_mcp_audit.