_ registry / mcp http-sse · checked 2h ago

Autoview MCP

https://api.autoview.com

Registry code: a1c084a48002ca44

api record

Autoview places and inspects orders on your own exchange accounts.

Signals reach Autoview as an HTTP POST to one of your webhook URLs (see hooks), from any sender that can make one: a TradingView alert, the user's own script or cron job, an automation platform such as n8n or Zapier, another charting or alerting service, or the user's own server. TradingView is one sender, not a requirement. The POST body is the command text (build it with command), sent as plain text, as a JSON string, or as a JSON object with a string "alert" field; form posts are refused. Autoview does not originate signals…

endpoint
https://api.autoview.com/mcp/
protocol
http-sse ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is Autoview MCP live?
Yes — it answered the hub's last check (checked 2h ago). It answered 99% of checks over the last 30 days.
Is Autoview MCP free to use?
Partly — some of its tools are open, others need a key or payment.
What tools does Autoview MCP have?
20 tools: setup, connect, link, entry, command, sandbox_run, sandbox_results, paper_reset, ….
Is Autoview MCP safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99.1%

90 days 99.1%· all time 99.1%

latency
424ms

last good check

priced tools
0

of 20 tools

_ answered our checks, 90 days 470 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
_ what it is for
used for
  • place orders on exchange accounts
  • build tradingview alert commands
  • connect an exchange account
  • read order execution events
takes → gives
data, text → data
tools
6 reads1 changes data1 moves money
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 20 tools
1 open6 auth-required 13 never probed 7 of 20 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • pricing open 12h ago

    What going live on Autoview costs, per venue. No token, no account: read-only, from Autoview's published price list. Each live exchange is its own subscription (most are $39.99 a month or $399.99 a year); practice/demo venues are free, and a few venues are free live. Returns { currency: "USD", venues: [{ exchange, name, live_monthly, live_yearly, demo, note, free_practice_venue?, live_venue? }], unknown?: [{ input, code: "unknown_exchange", fix }], how_to_go_live, source }. live_monthly and live_yearly are dollars (live_yearly is null when there is no yearly plan); demo is true for a practice venue (no real money, $0). Omit exchanges to list every venue. A refusal returns { error, code, fix }: bad_exchanges, too_many_exchanges, unknown_exchange. Do what fix says.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "exchanges": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "optional venue ids, any spelling, up to 60, e.g. [\"kraken\", \"oanda\", \"alpaca_paper\"]; omit for every venue"
        }
      }
    }
    arguments 13 lines
  • catalog reads auth-required 16h ago

    List every exchange configured on Autoview, filterable by paper (testnet/practice/sim, no real money), free (no Autoview subscription required), and name. Every listed exchange works with entry, command, alert and connect once its credentials are linked to one of your hooks (the exchange itself validates the order); linkable ones also take paper keys via link -- see connect_url to add credentials for one. Pass exchange (any spelling of its id, e.g. "OANDAPRACTICE") to get that one exchange in detail instead of the list: credentials is a JSON Schema whose property keys are exactly the keys link takes (titles are the exchange's own labels, required lists the ones it needs), plus linkable and unsupported_parameters (command parameters the exchange rejects, e.g. sl/tp; an attached bracket using one is refused up front). The list reply also carries language: the card for the one-line Autoview trade language that command({ line }) accepts. Requires your Autoview account token.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "free": {
          "type": "boolean",
          "description": "filter to (true) or exclude (false) exchanges that need no Autoview subscription; omit for both"
        },
        "name": {
          "type": "string",
          "description": "case-insensitive substring match against the exchange's display name or id, e.g. \"binance\""
        },
        "paper": {
          "type": "boolean",
          "description": "filter to (true) or exclude (false) paper/testnet/sim exchanges; omit for both"
        },
        "token": {
          "type": "string",
          "description": "your Autoview account token — an av_mcp_ personal access token, generate one at /account/tokens/ on the Autoview site. Omit this if your MCP client already sends it as an `Authorization: Bearer` header (Claude Code, Cursor, and most non-browser clients do this automatically once configured)."
        },
        "exchange": {
          "type": "string",
          "description": "one exchange id (any spelling, e.g. \"OANDAPRACTICE\" or \"oanda-practice\") to get its credential schema and facts instead of the list; paper/free/name are ignored when this is set"
        }
      }
    }
    arguments 26 lines
  • hooks reads auth-required 8h ago

    List your Autoview webhook URLs: the address any webhook sender POSTs an alert to (a script or cron job, n8n, Zapier, your own server, or a TradingView alert's webhook field). The body is the command text from `command`, sent as plain text, a JSON string, or JSON {"alert": "..."} (form posts are refused). Each hook already knows which exchange(s) it is linked to; there is nothing further to configure on the Autoview side. Pair with the `command` tool (or use `alert` to build both at once). Requires your Autoview account token. The returned URL is itself a bearer secret for unattended trading — treat it like a password; rotate a hook's key from /account/hooks/ on the Autoview site if it leaks.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "token": {
          "type": "string",
          "description": "your Autoview account token — an av_mcp_ personal access token, generate one at /account/tokens/ on the Autoview site. Omit this if your MCP client already sends it as an `Authorization: Bearer` header (Claude Code, Cursor, and most non-browser clients do this automatically once configured)."
        }
      }
    }
    arguments 10 lines
  • alert reads auth-required 8h ago

    Build everything TradingView's create_alert(webhook, message, expiration, resolution) needs, in one call: fuses `command` (the message) and `hooks` (the webhook URL for hook_id), and fills in the expiration (default 1 year out -- TradingView itself defaults to only 30 days, which silently stops the alert) and resolution (default "1") TradingView also needs. The order is validated against the exchange(s) hook_id is actually linked to and rejected if it could never fire there. Returns warnings you should read, including never putting the hook's key in the message field and a fan-out warning when the hook links more than one exchange. Pass the alert field instead of the structured fields to use raw webhook command text with any key a webhook accepts. Dry-run by default like `command`; set live:true to build a command that trades for real once the alert fires. For any other sender, `command` + `hooks` give the same message and webhook URL; expiration and resolution are TradingView settings only. Requires your Autoview account token.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "hook_id"
      ],
      "properties": {
        "live": {
          "type": "boolean",
          "description": "false (default) = build a dry-run preview command (appends d=1); true = build a command that places a real order when the alert fires"
        },
        "side": {
          "enum": [
            "buy",
            "sell"
          ],
          "type": "string",
          "description": "order direction; required unless action is set, where it is an optional buy/sell filter for cancel/close (omit for flat)"
        },
        "type": {
          "enum": [
            "market",
            "limit",
            "post_only",
            "ioc",
            "fok",
            "stop",
            "stop_limit"
          ],
          "type": "string",
          "description": "order type; defaults to limit at the ticker (t=limit with no price, same as a plain alert). An attached bracket needs type market explicitly."
        },
        "unit": {
          "enum": [
            "units",
            "currency"
          ],
          "type": "string",
          "description": "\"currency\" treats quantity as a CURRENCY amount to convert to units at the resolved price (u=currency) — e.g. quantity:10 with unit:\"currency\" on BTC/USD buys $10 of BTC instead of 10 BTC. Only meaningful with a fixed (non-percent) quantity."
        },
        "alert": {
          "type": "string",
          "description": "the raw command text a webhook body carries, e.g. s=BTCUSD b=buy q=0.01 fp=60000 ef=any tif=gtc; any key a webhook accepts works here, it is checked by the engine's parser and becomes the message as-is (with d=1 leading each line unless live is true). Do not combine with the structured order fields."
        },
        "price": {
          "type": "number",
          "description": "absolute limit price; required for an explicit limit, post_only, ioc, fok, and stop_limit (omit type and price for a limit at the ticker)"
        },
        "token": {
          "type": "string",
          "description": "your Autoview account token — an av_mcp_ personal access token, generate one at /account/tokens/ on the Autoview site. Omit this if your MCP client already sends it as an `Authorization: Bearer` header (Claude Code, Cursor, and most non-browser clients do this automatically once configured)."
        },
        "action": {
          "enum": [
            "cancel",
            "close",
            "flat"
          ],
          "type": "string",
          "description": "manage EXISTING orders/positions on symbol instead of placing a new one: cancel = cancel open orders, close = close open positions, flat = cancel every order AND close every position (Tradovate only). When set, side (if given) is an optional buy/sell filter (not applicable to flat), and quantity/type/price/trigger/brackets/unit are ignored."
        },
        "symbol": {
          "type": "string",
          "description": "the instrument symbol, e.g. EUR_USD, XBTUSD, BTC_USD. Required unless alert is set"
        },
        "hook_id": {
          "type": "string",
          "description": "the hook whose URL becomes the alert's webhook (see the `hooks` tool)"
        },
        "trigger": {
          "type": "number",
          "description": "absolute trigger (stop) price; required for stop and stop_limit",
          "exclusiveMinimum": 0
        },
        "exchange": {
          "enum": [
            "ALPACA",
            "ALPACAPAPER",
            "BINANCE",
            "BINANCEDELIVERY",
            "BINANCEDELIVERYTESTNET",
            "BINANCEFUTURES",
            "BINANCEFUTURESTESTNET",
            "BINANCETEST",
            "BINANCEUS",
            "BITMEX",
            "BITMEXTESTNET",
            "BITFINEX",
            "BITGET",
            "BITGETDEMO",
            "BITGETMIX",
            "BITGETMIXCOPY",
            "BITGETMIXDEMO",
            "BYBIT",
            "BYBITCOPY",
            "BYBITCOPYTESTNET",
            "BYBITSPOT",
            "BYBITSPOTTESTNET",
            "BYBITTESTNET",
            "CAPITAL",
            "CAPITALDEMO",
            "CHARLESSCHWAB",
            "COINBASE",
            "CRYPTO",
            "CRYPTODEMO",
            "DERIBIT",
            "DERIBITTESTNET",
            "GATE",
            "GATEFUTURES",
            "GATEFUTURESTESTNET",
            "GEMINI",
            "GEMINISANDBOX",
            "HUOBI",
            "HUOBIFUTURES",
            "HUOBILINEAR",
            "HUOBISWAP",
            "HYPERLIQUID",
            "HYPERLIQUIDTESTNET",
            "KRAKEN",
            "KRAKENFUTURES",
            "KUCOIN",
            "KUCOINFUTURES",
            "KUCOINFUTURESCOPY",
            "OANDA",
            "OANDAPRACTICE",
            "OKX",
            "OKXDEMO",
            "OKXEEA",
            "OKXEEADEMO",
            "OKXUS",
            "OKXUSDEMO",
            "TRADESTATION",
            "TRADESTATIONSIM",
            "TRADOVATE",
            "TRADOVATESIM"
          ],
          "type": "string",
          "description": "optional — any exchange id known to Autoview (see `catalog`); a bracket is refused if that exchange lists its params as unsupported. Must be one of the exchanges hook_id is linked to (otherwise the alert is rejected); omit to validate against every exchange the hook is linked to"
        },
        "priceRef": {
          "type": "number",
          "description": "reference price for percent sizing and brackets",
          "exclusiveMinimum": 0
        },
        "quantity": {
          "anyOf": [
            {
              "type": "number",
              "exclusiveMinimum": 0
            },
            {
              "type": "string",
              "pattern": "^(100|[1-9][0-9]?)%$"
            }
          ],
          "description": "order size: a positive number (contracts/units), or a percent-of-balance string like \"50%\" (1-100%). Required unless action is set."
        },
        "stopLoss": {
          "anyOf": [
            {
              "type": "number",
              "exclusiveMinimum": 0
            },
            {
              "type": "string"
            }
          ],
          "description": "attached bracket stop-loss distance from the fill: points (10) or a percent string such as 3%; a sign, if given, must point the right way); pairs with takeProfit or a trail leg"
        },
        "trailStop": {
          "type": "number",
          "description": "auto-trail stop distance in points; requires trailActivate",
          "exclusiveMinimum": 0
        },
        "expiration": {
          "type": "string",
          "description": "ISO 8601 timestamp for TradingView's alert expiration; defaults to 1 year from now"
        },
        "resolution": {
          "type": "string",
          "description": "chart timeframe TradingView's create_alert needs; defaults to \"1\" (1 minute)"
        },
        "takeProfit": {
          "anyOf": [
            {
              "type": "number",
              "exclusiveMinimum": 0
            },
            {
              "type": "string"
            }
          ],
          "description": "attached bracket take-profit distance from the fill: points (20) or a percent string such as 5%; pairs with stopLoss or a trail leg"
        },
        "trailActivate": {
          "type": "number",
          "description": "points of profit before the trail starts; required whenever trailStop is set",
          "exclusiveMinimum": 0
        },
        "trailFrequency": {
          "type": "number",
          "description": "how often the trailing stop re-checks price; defaults to 1 if omitted",
          "exclusiveMinimum": 0
        },
        "sizeAgainstEquity": {
          "type": "boolean",
          "description": "for a percent quantity, size against equity instead of available balance (y=equity)"
        }
      }
    }
    arguments 210 lines
  • live_limits auth-required 16h ago

    Read this token's live limits: the max order size and daily limit (USD notional: quantity x limit price, or quantity x trigger price when that is higher, or on a sell quantity x current bid when that is higher) your user set for this token, the account caps that cover every agent token on the account together (the hard outer limit once set; account.set is false when your user has not set them, and then the token's own caps alone apply), any tighter limits your user set for one exchange or one symbol on it (venue_caps, with today's use there), the most live orders this token may place in any rolling minute (max_orders_per_minute; null = no rate limit), how much of each is used today, and whether this token can place a live entry order right now. Read-only: an agent cannot set or raise these; only the user can, at /account/tokens/ (set_at). The day is the UTC calendar day (resets_at). Returns { live, max_order_usd, daily_limit_usd, used_today_usd, remaining_today_usd, account: { set, max_order_usd, daily_limit_usd, used_today_usd, remaining_today_usd }, effective_max_order_usd, effective_remaining_today_usd, venue_caps, max_orders_per_minute, agent_trading_paused, paused_at, token_paused, token_paused_at, day, resets_at, unit, set_at, can_place_live, code?, reason? }. agent_trading_paused true means your user has paused all agent trading on the account (code agent_trading_paused); only your user can turn it off. token_paused true means your user has paused this token (code agent_token_paused); only your user can turn it off. Tell your user these numbers before going live. Requires your Autoview account token.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "token": {
          "type": "string",
          "description": "your Autoview account token — an av_mcp_ personal access token, generate one at /account/tokens/ on the Autoview site. Omit this if your MCP client already sends it as an `Authorization: Bearer` header (Claude Code, Cursor, and most non-browser clients do this automatically once configured)."
        }
      }
    }
    arguments 10 lines
  • feedback_status auth-required 12h ago

    Read where one send_feedback message stands: pending (waiting for a person to review it), approved (passed on to the Autoview team) or declined (reviewed and not passed on), with received_at. Pass the id send_feedback returned and the same account token it was sent with. Only the status comes back, never the message or contact. Feedback sent without a token has no status to read. Returns { id, status, received_at, note }. A refusal returns { error, code, fix }: bad_id, not_found (no such id for this account; the same answer for an id that belongs to someone else), invalid_token, feedback_unavailable. Do what fix says.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "the id send_feedback returned (a UUID such as 01a1c64b-0000-7000-8000-000000000000)"
        },
        "token": {
          "type": "string",
          "description": "your Autoview account token — an av_mcp_ personal access token, generate one at /account/tokens/ on the Autoview site. Omit this if your MCP client already sends it as an `Authorization: Bearer` header (Claude Code, Cursor, and most non-browser clients do this automatically once configured). Use the token the feedback was sent with."
        }
      }
    }
    arguments 17 lines
  • events reads auth-required 8h ago

    Read what your orders did. Pass trace (the id entry or command's caller received) to read one order's events; omit trace to list your account's recent events instead, newest first, optionally narrowed by hook_id and/or canonical_id — this is the only way to see an order any webhook sender (TradingView, a script, another platform) fired directly, since it never went through entry and has no trace. Requires your Autoview account token. Poll this a moment after an order if the events are not there yet — the exchange reports back out-of-band.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 100,
          "description": "max events to return (default 20)",
          "exclusiveMinimum": 0
        },
        "token": {
          "type": "string",
          "description": "your Autoview account token — an av_mcp_ personal access token, generate one at /account/tokens/ on the Autoview site. Omit this if your MCP client already sends it as an `Authorization: Bearer` header (Claude Code, Cursor, and most non-browser clients do this automatically once configured)."
        },
        "trace": {
          "type": "string",
          "description": "the trace id returned by the entry tool for the order you want to inspect; omit to list your account's recent events instead"
        },
        "hook_id": {
          "type": "string",
          "description": "when trace is omitted, narrow the account-wide listing to events reported for this hook"
        },
        "canonical_id": {
          "type": "string",
          "description": "when trace is omitted, narrow the account-wide listing to events reported for one webhook delivery (the canonical id a webhook call produces)"
        }
      }
    }
    arguments 28 lines
  • setup reads unknown never probed

    Read this FIRST. Returns your account overview: token scopes (live/exchange), which exchanges your token can call at all (callable), which of those allow a real live order right now vs. force a dry-run for lack of an active subscription (live_allowed/dry_run_forced, with upgrade_url when forced), per-exchange facts (id, whether it is free, whether it is a paper/no-real-money venue, whether the `link` tool accepts it (linkable), the parameters its integration lists as unsupported (unsupported_parameters), its setup_url and its required credential labels (credentials)), and your hooks with their linked exchanges. If no hook is linked to any exchange yet, recommended_first_exchange points at a free paper venue to start with. failing_hooks flags any hook whose last several alerts all failed with the SAME error (a stuck webhook loop). Requires your Autoview account token.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "token": {
          "type": "string",
          "description": "your Autoview account token — an av_mcp_ personal access token, generate one at /account/tokens/ on the Autoview site. Omit this if your MCP client already sends it as an `Authorization: Bearer` header (Claude Code, Cursor, and most non-browser clients do this automatically once configured)."
        }
      }
    }
    arguments 10 lines
  • connect changes data unknown never probed

    Connect any exchange configured on Autoview (see catalog) to your account: creates a webhook and links it to your already-saved credentials for that exchange, the same steps 2-4 the website's setup wizard runs. Safe to call more than once -- if a webhook is already linked, it reports connected:true and creates nothing new. If you have no credentials saved for this exchange yet, returns connect_url instead: open it in a browser to add them, then call connect again with the same exchange (for a paper/testnet exchange you can instead call link with its keys; real-money keys are browser-only). Connecting a real-money (non-paper) exchange requires a live-scoped token; any token can connect a paper/testnet exchange. Requires your Autoview account token.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "exchange"
      ],
      "properties": {
        "token": {
          "type": "string",
          "description": "your Autoview account token — an av_mcp_ personal access token, generate one at /account/tokens/ on the Autoview site. Omit this if your MCP client already sends it as an `Authorization: Bearer` header (Claude Code, Cursor, and most non-browser clients do this automatically once configured)."
        },
        "hook_id": {
          "type": "string",
          "description": "link this specific existing hook instead of letting connect pick or create one (see the `hooks` tool for your hook ids). Must have no other exchange linked -- an order fires on every exchange a hook links, so connect refuses to add a second one; omit hook_id to get a dedicated hook"
        },
        "exchange": {
          "enum": [
            "ALPACA",
            "ALPACAPAPER",
            "BINANCE",
            "BINANCEDELIVERY",
            "BINANCEDELIVERYTESTNET",
            "BINANCEFUTURES",
            "BINANCEFUTURESTESTNET",
            "BINANCETEST",
            "BINANCEUS",
            "BITMEX",
            "BITMEXTESTNET",
            "BITFINEX",
            "BITGET",
            "BITGETDEMO",
            "BITGETMIX",
            "BITGETMIXCOPY",
            "BITGETMIXDEMO",
            "BYBIT",
            "BYBITCOPY",
            "BYBITCOPYTESTNET",
            "BYBITSPOT",
            "BYBITSPOTTESTNET",
            "BYBITTESTNET",
            "CAPITAL",
            "CAPITALDEMO",
            "CHARLESSCHWAB",
            "COINBASE",
            "CRYPTO",
            "CRYPTODEMO",
            "DERIBIT",
            "DERIBITTESTNET",
            "GATE",
            "GATEFUTURES",
            "GATEFUTURESTESTNET",
            "GEMINI",
            "GEMINISANDBOX",
            "HUOBI",
            "HUOBIFUTURES",
            "HUOBILINEAR",
            "HUOBISWAP",
            "HYPERLIQUID",
            "HYPERLIQUIDTESTNET",
            "KRAKEN",
            "KRAKENFUTURES",
            "KUCOIN",
            "KUCOINFUTURES",
            "KUCOINFUTURESCOPY",
            "OANDA",
            "OANDAPRACTICE",
            "OKX",
            "OKXDEMO",
            "OKXEEA",
            "OKXEEADEMO",
            "OKXUS",
            "OKXUSDEMO",
            "TRADESTATION",
            "TRADESTATIONSIM",
            "TRADOVATE",
            "TRADOVATESIM"
          ],
          "type": "string",
          "description": "the exchange to connect"
        }
      }
    }
    arguments 82 lines
  • link unknown never probed

    Save a PAPER/TESTNET exchange's API keys to your account and link them to a webhook, in one step -- for an agent that has a practice account's keys and no browser. Only ALPACAPAPER, BINANCEDELIVERYTESTNET, BINANCEFUTURESTESTNET, BINANCETEST, BITGETDEMO, BITGETMIXDEMO, BITMEXTESTNET, BYBITCOPYTESTNET, BYBITSPOTTESTNET, BYBITTESTNET, CAPITALDEMO, CRYPTODEMO, DERIBITTESTNET, GATEFUTURESTESTNET, GEMINISANDBOX, HYPERLIQUIDTESTNET, OANDAPRACTICE, OKXDEMO, OKXEEADEMO, OKXUSDEMO, TRADOVATESIM are accepted (they never move real money); real-money exchanges are refused whatever your token's scope, and their keys must be added on autoview.com in a browser (see connect). The credentials object uses named keys (public, private, passphrase, email, vault, id, cid, sec); which of them an exchange takes, and what each is called on that exchange, is in catalog({ exchange }): its credentials schema lists the exact keys (titles are the exchange's own labels) and which are required. The keys are encrypted and stored exactly as the website's setup form stores them, and are never echoed back. hook_id, if given, must be one of your own hooks with no exchange linked yet (an order fires on every exchange a hook links); omit it to use an empty hook of yours or get a new one. Then call entry with the returned hook_id (dry-run by default) to check the keys work. Requires your Autoview account token; any token can link a paper exchange.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "exchange",
        "credentials"
      ],
      "properties": {
        "token": {
          "type": "string",
          "description": "your Autoview account token — an av_mcp_ personal access token, generate one at /account/tokens/ on the Autoview site. Omit this if your MCP client already sends it as an `Authorization: Bearer` header (Claude Code, Cursor, and most non-browser clients do this automatically once configured)."
        },
        "hook_id": {
          "type": "string",
          "description": "link this specific hook of yours (it must have no exchange linked yet); omit to use an empty hook or create a new one"
        },
        "exchange": {
          "enum": [
            "ALPACAPAPER",
            "BINANCEDELIVERYTESTNET",
            "BINANCEFUTURESTESTNET",
            "BINANCETEST",
            "BITGETDEMO",
            "BITGETMIXDEMO",
            "BITMEXTESTNET",
            "BYBITCOPYTESTNET",
            "BYBITSPOTTESTNET",
            "BYBITTESTNET",
            "CAPITALDEMO",
            "CRYPTODEMO",
            "DERIBITTESTNET",
            "GATEFUTURESTESTNET",
            "GEMINISANDBOX",
            "HYPERLIQUIDTESTNET",
            "OANDAPRACTICE",
            "OKXDEMO",
            "OKXEEADEMO",
            "OKXUSDEMO",
            "TRADOVATESIM"
          ],
          "type": "string",
          "description": "the paper/testnet exchange these keys belong to"
        },
        "credentials": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "OANDAPRACTICE: Account ID"
            },
            "cid": {
              "type": "string",
              "description": "TRADOVATESIM: CID"
            },
            "sec": {
              "type": "string",
              "description": "TRADOVATESIM: Secret"
            },
            "email": {
              "type": "string",
              "description": "CAPITALDEMO: Email Address"
            },
            "vault": {
              "type": "string",
              "description": "HYPERLIQUIDTESTNET: Sub-account / Vault Address (optional)"
            },
            "public": {
              "type": "string",
              "description": "ALPACAPAPER: API Key ID; BINANCEDELIVERYTESTNET: API Key; BINANCEFUTURESTESTNET: API Key; BINANCETEST: API Key; BITGETDEMO: Access API Key; BITGETMIXDEMO: Access API Key; BITMEXTESTNET: ID; BYBITCOPYTESTNET: API Key; BYBITSPOTTESTNET: API Key; BYBITTESTNET: API Key; CAPITALDEMO: API Key; CRYPTODEMO: API Key; DERIBITTESTNET: Access Key; GATEFUTURESTESTNET: API Key; GEMINISANDBOX: API Key; HYPERLIQUIDTESTNET: Public Address (optional); OKXDEMO: API Key; OKXEEADEMO: API Key; OKXUSDEMO: API Key; TRADOVATESIM: Username"
            },
            "private": {
              "type": "string",
              "description": "ALPACAPAPER: Secret Key; BINANCEDELIVERYTESTNET: Secret; BINANCEFUTURESTESTNET: Secret; BINANCETEST: Secret; BITGETDEMO: Secret Key; BITGETMIXDEMO: Secret Key; BITMEXTESTNET: Secret; BYBITCOPYTESTNET: Private Key; BYBITSPOTTESTNET: Private Key; BYBITTESTNET: Private Key; CAPITALDEMO: Custom Password; CRYPTODEMO: Secret Key; DERIBITTESTNET: Access Secret; GATEFUTURESTESTNET: API Secret; GEMINISANDBOX: API Secret; HYPERLIQUIDTESTNET: Secret Key; OANDAPRACTICE: Access Token; OKXDEMO: Secret Key; OKXEEADEMO: Secret Key; OKXUSDEMO: Secret Key; TRADOVATESIM: Password"
            },
            "passphrase": {
              "type": "string",
              "description": "BITGETDEMO: Passphrase; BITGETMIXDEMO: Passphrase; OKXDEMO: Passphrase; OKXEEADEMO: Passphrase; OKXUSDEMO: Passphrase"
            }
          },
          "description": "the practice account's keys, one string per field: fill only the fields the chosen exchange takes. The credentials object uses named keys (public, private, passphrase, email, vault, id, cid, sec); which of them an exchange takes, and what each is called on that exchange, is in catalog({ exchange }): its credentials schema lists the exact keys (titles are the exchange's own labels) and which are required.",
          "additionalProperties": {}
        }
      }
    }
    arguments 84 lines
  • entry moves money unknown never probed

    Place an order on any exchange you have linked to a hook, right now — or manage existing orders/positions on `symbol` via `action` (cancel open orders, close open positions, or flat/liquidate everything — Tradovate only). You fill structured order fields (symbol, side, quantity, type, price, trigger) — Autoview assembles the order for you. Or pass alert: the same command text a webhook body carries, which reaches the engine unchanged, so every syntax key a webhook supports is supported here. Dry-run by default: a bare call returns the parsed order without placing it; set live:true to place a real order. On a paid exchange without an active Autoview subscription, live:true is silently downgraded to a dry-run — the response then carries dry_run_forced:true and a dry_run_reason explaining why (see the `setup` tool for which exchanges this applies to, and where to subscribe). The order is relayed to the exchange asynchronously: this returns { queued, trace, canonical_id } immediately, not the fill. For a dry-run (the default), entry waits up to ~10s for the exchange's own reply and returns it as dry_run_events when it arrives in time — otherwise dry_run_pending:true, and you can poll the `events` tool with canonical_id (or trace) a moment later. Credentials come from hook_id -- the credentials you already linked to one of your hooks (see the `hooks` or `setup` tool) -- so no exchange secret is passed with the order. exchange is optional when that hook links to exactly one exchange; pass it explicitly if the hook links to more than one. If you don't have credentials linked yet, use the `command` tool to check an order's shape without a hook. Live limits: a live:true order (not cancel/close/flat) must fit this token's user-set caps AND, once your user has set them, the account caps (they cover every agent token on the account together; with none set, the token's caps alone apply), and any limits your user set for one exchange or one symbol on it, which can only be tighter; read them all with `live_limits`. It must be a limit order with price and a plain number quantity, in a USD or USD-stablecoin quoted market; the order's USD notional, the higher of quantity x limit price and quantity x trigger price (and on a sell, quantity x current bid from the exchange's quote when that is higher), must be at most the token's max order size (and the account's, if set), and today's totals (UTC day, counted at dispatch; per token, and for the whole account if an account daily limit is set) at most those daily limits. Refusal codes, each with fix steps: agent_trading_paused (your user paused all agent trading on the account; cancel/close/flat still work), agent_token_paused (your user paused this one token; cancel/close/flat still work), caps_not_set, caps_unavailable, cap_max_order_exceeded, cap_account_max_order_exceeded, cap_daily_limit_exceeded, cap_account_daily_limit_exceeded, cap_venue_max_order_exceeded, cap_venue_daily_limit_exceeded, cap_venue_daily_orders_exceeded (an exchange limit), cap_symbol_max_order_exceeded, cap_symbol_daily_limit_exceeded, cap_symbol_daily_orders_exceeded (a limit on one symbol on that exchange), cap_order_rate_exceeded (this token's limit on live orders per rolling minute, if your user set one; wait retry_after_s seconds), cap_limit_price_required, cap_quantity_unsupported, cap_quote_unsupported, cap_market_unsupported. Only your user can set or raise the caps, or pause and resume agent trading, at /account/tokens/. Requires your Autoview account token, except for a paper fill. No token? On BINANCE, BINANCEFUTURES, BINANCEUS, BITFINEX, BITGET, BITGETMIX, BITGETMIXCOPY, BYBIT, BYBITCOPY, BYBITSPOT, GEMINI, KUCOINFUTURES, KUCOINFUTURESCOPY, leave out token and hook_id, pass exchange and one order (structured, or one alert line with no & sections and no | or line breaks), and entry fills it on paper at the quote an Autoview zone reads from that venue's public market data: a buy at the ask, a sell at the bid, for a market order and for a limit order that crosses the quote (its limit price is echoed as limit_price). A limit order that does not cross the quote (a buy limit below the ask, a sell limit above the bid) is stored instead as an open paper order and returns { paper_order: true, order: { order_id, symbol, side, qty, limit_price, state: "open" }, cash, note }, moving neither cash nor the position; it fills at its limit price the first time a later quote crosses it, checked when paper_ledger reads that ledger or entry sends a paper order on that symbol to it (orders it filled come back as filled_orders). Cancel it with action cancel and order_id on the same ledger (paper_cancel: true; paper_order_unknown if that ledger has no such order, paper_order_not_open if it already filled or was cancelled). Every stored paper fill returns fill_id. An alert id= (your own order id, one word of up to 64 characters, or paper_sender_id_invalid) comes back as sender_id. On an account paper ledger (token, no hook_id) each fill also writes one entry of type paper_fill to the events tool, with canonical_id, fill_id and sender_id; the reply returns canonical_id, and a resting order uses its order_id as its canonical_id. A guest ledger writes no events. Nothing is sent to the exchange. The first fill opens a paper ledger for that exchange and returns paper_id, shown only once; pass it as paper_id on later no-token fills on the same exchange and each fill is recorded there; read it back with paper_ledger and that paper_id. It returns { paper_fill, exchange, fill, quote, stored, paper_id (first fill only), position: { symbol, qty (signed, negative is short), avg_price }, realized, cash }. cash is null until paper_reset sets a starting balance on the ledger; once set, a buy takes its notional from cash and a sell adds its notional, and a buy that costs more than the cash fills nothing (paper_insufficient_cash). Where the ledger is not available yet it returns stored:false and keeps nothing between calls. quantity must be a plain number of units; live:true, hook_id, action (except cancel with order_id), brackets, a percent or currency size, and more than one order are refused with a code (paper_live_refused, paper_hook_refused, paper_management_unsupported, paper_bracket_unsupported, paper_quantity_unsupported, paper_single_order_only, paper_order_invalid); so are a paper_id no ledger has (paper_id_unknown) and one from another exchange (paper_id_other_exchange). If the ledger cannot be written nothing fills (paper_ledger_unavailable). With no quote it fills nothing and returns the quote's code (quote_no_responders, quote_timeout, quote_no_answer, quote_unconfigured). No-token calls share the guest limits: 10 per hour per connection, 200 per hour for all guests (guest_rate_limited). With a token and no hook_id on those same venues, entry fills on paper the same way on the account's own paper ledger for that exchange, opened by the first fill (read it with paper_ledger and the token, set its cash with paper_reset). Any token may do this, including a dry-run-only one, and the guest limits do not apply. To keep a guest paper ledger after your user signs up, send its paper_id with the token: the first tokened call moves that ledger onto the account (the reply carries claimed:true) and the fill lands on it; from then on use the token and leave paper_id out, as the paper_id no longer works without the token. The same order refusals apply, plus: live:true (paper_live_refused: send hook_id for a hook linked to that exchange to trade live), a paper_id another account already took (paper_id_claimed: leave paper_id out), a paper_id when the account already has its own paper ledger on that exchange (paper_id_not_merged: the account ledger is kept and the guest ledger is not merged; leave paper_id out, or leave the token out to keep the guest ledger), paper_id_unknown, paper_id_other_exchange, and an exchange outside the token's scope (paper_exchange_out_of_scope). With a hook_id, entry trades that hook's linked exchange as above. With no token on any other exchange, entry is refused (paper_venue_unsupported): there is no paper venue there yet, so send the token with hook_id for a hook linked to that exchange, or use sandbox_run.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "live": {
          "type": "boolean",
          "description": "false (default) = a dry-run preview that returns the parsed order without placing it; true = place a real order on your live account"
        },
        "side": {
          "enum": [
            "buy",
            "sell"
          ],
          "type": "string",
          "description": "order direction; required unless action is set, where it is an optional buy/sell filter for cancel/close (omit for flat)"
        },
        "type": {
          "enum": [
            "market",
            "limit",
            "post_only",
            "ioc",
            "fok",
            "stop",
            "stop_limit"
          ],
          "type": "string",
          "description": "order type; omitted = limit at the ticker (the same default as a plain alert: t=limit, no price). An explicit limit, post_only, ioc, fok or stop_limit needs a price; stop/stop_limit need a trigger; an attached bracket needs type market explicitly. stop/stop_limit need a trigger. An entry stop keeps the order side. Not every exchange supports every type; explain_command lists the known caveats per exchange."
        },
        "unit": {
          "enum": [
            "units",
            "currency"
          ],
          "type": "string",
          "description": "\"currency\" treats quantity as a CURRENCY amount to convert to units at the resolved price (u=currency) — e.g. on BTC/USD, quantity:10 with unit:\"currency\" buys $10 of BTC instead of 10 BTC. Only meaningful with a fixed (non-percent) quantity. On TRADOVATESIM also pass priceRef (or price) — see priceRef."
        },
        "alert": {
          "type": "string",
          "description": "the raw command text a webhook body carries, sent to the zone exactly as a webhook would send it, so every key the engine reads works here too (for example ef=any, ac=/acg=, tif=, l=, delay=, cc/bcc, & legs, | lines; see autoview.com/syntax/ and explain_command). Replaces every structured order field (passing both is refused). Dry-run unless live:true: without it every d= is replaced by d=1. Live, every line needs s=, and the live caps read each opening line's base order (q= a plain number, fp= the limit price): each line must fit the max order size on its own, and their sum is counted against today's limits in one go, so if the sum does not fit, no line is placed. c= and b=flat lines are not capped. On an exchange that sends one order per & section (OANDA, Capital, Charles Schwab and others), each & section counts against every live cap as one more order, at its own q= or the base q=, whichever is larger; a section may set q= there but no other order key. On an exchange that merges & into one order (Binance, Bybit, Kraken and others) the line counts once. A refusal for one line names it (line)."
        },
        "price": {
          "type": "number",
          "description": "absolute limit price; required for limit, post_only, ioc, fok, and stop_limit. Also accepted (optional) on a market order as a stand-in for priceRef."
        },
        "token": {
          "type": "string",
          "description": "your Autoview account token — an av_mcp_ personal access token, generate one at /account/tokens/ on the Autoview site. Omit this if your MCP client already sends it as an `Authorization: Bearer` header (Claude Code, Cursor, and most non-browser clients do this automatically once configured)."
        },
        "action": {
          "enum": [
            "cancel",
            "close",
            "flat"
          ],
          "type": "string",
          "description": "manage EXISTING orders/positions on symbol instead of placing a new one: cancel = cancel open orders, close = close open positions, flat = cancel every order AND close every position (the Tradovate connector only: TRADOVATE, TRADOVATESIM, TRADOVATETEST; any other exchange refuses it as unsupported). When set, side (if given) is an optional buy/sell filter (not applicable to flat), and quantity/type/price/trigger/brackets/unit are ignored."
        },
        "symbol": {
          "type": "string",
          "description": "the instrument symbol, e.g. EUR_USD, XBTUSD, BTC_USD. Required unless alert is set"
        },
        "hook_id": {
          "type": "string",
          "description": "use the credentials already linked to this hook (see the `hooks` tool). The hook must belong to your account. Required with a token, except on a paper fill venue, where leaving it out fills on the account's own paper ledger; leave it out for a no-token paper fill."
        },
        "trigger": {
          "type": "number",
          "description": "absolute trigger (stop) price; required for stop and stop_limit",
          "exclusiveMinimum": 0
        },
        "exchange": {
          "enum": [
            "ALPACA",
            "ALPACAPAPER",
            "BINANCE",
            "BINANCEDELIVERY",
            "BINANCEDELIVERYTESTNET",
            "BINANCEFUTURES",
            "BINANCEFUTURESTESTNET",
            "BINANCETEST",
            "BINANCEUS",
            "BITMEX",
            "BITMEXTESTNET",
            "BITFINEX",
            "BITGET",
            "BITGETDEMO",
            "BITGETMIX",
            "BITGETMIXCOPY",
            "BITGETMIXDEMO",
            "BYBIT",
            "BYBITCOPY",
            "BYBITCOPYTESTNET",
            "BYBITSPOT",
            "BYBITSPOTTESTNET",
            "BYBITTESTNET",
            "CAPITAL",
            "CAPITALDEMO",
            "CHARLESSCHWAB",
            "COINBASE",
            "CRYPTO",
            "CRYPTODEMO",
            "DERIBIT",
            "DERIBITTESTNET",
            "GATE",
            "GATEFUTURES",
            "GATEFUTURESTESTNET",
            "GEMINI",
            "GEMINISANDBOX",
            "HUOBI",
            "HUOBIFUTURES",
            "HUOBILINEAR",
            "HUOBISWAP",
            "HYPERLIQUID",
            "HYPERLIQUIDTESTNET",
            "KRAKEN",
            "KRAKENFUTURES",
            "KUCOIN",
            "KUCOINFUTURES",
            "KUCOINFUTURESCOPY",
            "OANDA",
            "OANDAPRACTICE",
            "OKX",
            "OKXDEMO",
            "OKXEEA",
            "OKXEEADEMO",
            "OKXUS",
            "OKXUSDEMO",
            "TRADESTATION",
            "TRADESTATIONSIM",
            "TRADOVATE",
            "TRADOVATESIM"
          ],
          "type": "string",
          "description": "the exchange to trade on: any exchange configured on Autoview (see the `catalog` tool; the exchange itself validates the order). Omit when hook_id links to exactly one exchange (see the hooks tool) -- otherwise required to disambiguate"
        },
        "order_id": {
          "type": "string",
          "description": "paper only, with action cancel: the order_id of an open paper limit order (entry returned it when the limit rested; paper_ledger lists it). Cancels that one order on your own paper ledger"
        },
        "paper_id": {
          "type": "string",
          "description": "paper fill only: the paper_id your first no-token paper fill on this exchange returned, to record this fill on the same paper ledger; leave it out to open a new one. With a token (and no hook_id) it moves that guest ledger onto the account, first claim wins"
        },
        "priceRef": {
          "type": "number",
          "description": "reference price for percent sizing and brackets (price=); percent quantity divides balance by it. Optional on exchanges with a live quote feed (the zone fetches one); REQUIRED on TRADOVATESIM (no live market-data feed — Tradovate charges separately for it, and a Simulation account never has it) whenever quantity is a percent, unit is \"currency\", OR any of stopLoss/takeProfit/trailStop is set. Omitting it there fails late with a live exchange error instead of a clear one — pass an approximate current price.",
          "exclusiveMinimum": 0
        },
        "quantity": {
          "anyOf": [
            {
              "type": "number",
              "exclusiveMinimum": 0
            },
            {
              "type": "string",
              "pattern": "^(100|[1-9][0-9]?)%$"
            }
          ],
          "description": "order size: a positive number (contracts/units), or a percent-of-balance string like \"50%\" (1-100%). Required unless action is set. On TRADOVATESIM (no live market-data feed), a percent quantity also requires priceRef — see priceRef."
        },
        "stopLoss": {
          "anyOf": [
            {
              "type": "number",
              "exclusiveMinimum": 0
            },
            {
              "type": "string"
            }
          ],
          "description": "attached bracket stop-loss distance from the fill: points (10) or a percent string such as 3%; a sign, if given, must point the right way); pair with takeProfit for a fixed OCO, or with a trailing leg. Market entry only; refused up front where the connector's sl/tp handling is unverified or its config lists them unsupported; on some exchanges sl/tp reshape the order instead of attaching (explain_command names the caveat). On TRADOVATESIM also pass priceRef (or price) — see priceRef."
        },
        "trailStop": {
          "type": "number",
          "description": "attached TRAILING stop as a POINT distance the stop keeps behind price once the trail activates (atsl=). Requires trailActivate. Rides winners: pairs with a stopLoss (hard stop + trail) or stands alone. Market entry, trail-capable exchanges only (Tradovate). On TRADOVATESIM also pass priceRef (or price) — see priceRef.",
          "exclusiveMinimum": 0
        },
        "takeProfit": {
          "anyOf": [
            {
              "type": "number",
              "exclusiveMinimum": 0
            },
            {
              "type": "string"
            }
          ],
          "description": "attached bracket take-profit distance from the fill: points (20) or a percent string such as 5%; pair with stopLoss, or with a trailing leg. On TRADOVATESIM also pass priceRef (or price) — see priceRef."
        },
        "trailActivate": {
          "type": "number",
          "description": "POINTS of profit the price must move before the trailing stop starts trailing (atx=). Required whenever trailStop is set",
          "exclusiveMinimum": 0
        },
        "trailFrequency": {
          "type": "number",
          "description": "how often the trailing stop re-checks price (atf=); defaults to 1 if omitted",
          "exclusiveMinimum": 0
        },
        "sizeAgainstEquity": {
          "type": "boolean",
          "description": "for a percent quantity, size against equity instead of available balance (y=equity)"
        }
      }
    }
    arguments 207 lines
  • command reads unknown never probed

    Build an Autoview alert command string from structured order fields (symbol, side, quantity, type, price, trigger), or from ONE line of the Autoview trade language (line, e.g. "buy(BTCUSD, 0.2, -0.5%)"; grammar in catalog's language card), without placing an order. A line reply also carries echo, one plain sentence stating the resolved order: confirm the sentence, not the string: the output is the alert body any webhook sender POSTs to a hook URL (for TradingView, the value create_alert's `message` field carries). Also builds cancel/close/flat management commands via `action` (see entry's description). Dry-run by default: a bare call returns a preview command (appends d=1); set live:true to build a command that trades for real once the alert fires. Pass the alert field instead to check and return raw webhook command text with any key a webhook accepts. Prefer the `alert` tool if you also need the destination webhook, expiration, and resolution in one call. Requires your Autoview account token; live:true requires a live-scoped token. exchange is optional: pass any exchange id configured on Autoview (see the `catalog` tool; a bracket is refused if that exchange lists sl/tp as unsupported); omit exchange entirely to build a generic command routed by whichever exchange(s) the destination hook is linked to.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "line": {
          "type": "string",
          "description": "one line of the Autoview trade language instead of the structured fields below, e.g. buy(BTCUSD, 0.2), buy(BTCUSD, 0.2, -0.5%), sell(BTCUSD, 0.2, stop(78000)), close(BTCUSD), link(buy(BTCUSD, 0.2, market), takeProfit(+500), stopLoss(-300)), link(buy(BTCUSD, 0.2, market), takeProfit(+5%), stopLoss(-3%)). Slots are symbol, size, price; a signed price is an offset from the ticker, an unsigned one is absolute; no type word = limit at the ticker; no key=value. Full card: catalog's language field. Do not combine with symbol/side/quantity/type/price/trigger/brackets."
        },
        "live": {
          "type": "boolean",
          "description": "false (default) = build a dry-run preview command (appends d=1); true = build a command that places a real order when the alert fires"
        },
        "side": {
          "enum": [
            "buy",
            "sell"
          ],
          "type": "string",
          "description": "order direction; required unless action is set, where it is an optional buy/sell filter for cancel/close (omit for flat)"
        },
        "type": {
          "enum": [
            "market",
            "limit",
            "post_only",
            "ioc",
            "fok",
            "stop",
            "stop_limit"
          ],
          "type": "string",
          "description": "order type; defaults to limit at the ticker (t=limit with no price, same as a plain alert). An attached bracket needs type market explicitly."
        },
        "unit": {
          "enum": [
            "units",
            "currency"
          ],
          "type": "string",
          "description": "\"currency\" treats quantity as a CURRENCY amount to convert to units at the resolved price (u=currency) — e.g. quantity:10 with unit:\"currency\" on BTC/USD buys $10 of BTC instead of 10 BTC. Only meaningful with a fixed (non-percent) quantity."
        },
        "alert": {
          "type": "string",
          "description": "the raw command text a webhook body carries, e.g. s=BTCUSD b=buy q=0.01 fp=60000 ef=any tif=gtc; any key a webhook accepts works here, it is checked by the engine's parser and returned as-is (with d=1 leading each line unless live is true). Do not combine with line or the structured order fields."
        },
        "price": {
          "type": "number",
          "description": "absolute limit price; required for an explicit limit, post_only, ioc, fok, and stop_limit (omit type and price for a limit at the ticker)"
        },
        "token": {
          "type": "string",
          "description": "your Autoview account token — an av_mcp_ personal access token, generate one at /account/tokens/ on the Autoview site. Omit this if your MCP client already sends it as an `Authorization: Bearer` header (Claude Code, Cursor, and most non-browser clients do this automatically once configured)."
        },
        "action": {
          "enum": [
            "cancel",
            "close",
            "flat"
          ],
          "type": "string",
          "description": "manage EXISTING orders/positions on symbol instead of placing a new one: cancel = cancel open orders, close = close open positions, flat = cancel every order AND close every position (Tradovate only). When set, side (if given) is an optional buy/sell filter (not applicable to flat), and quantity/type/price/trigger/brackets/unit are ignored."
        },
        "symbol": {
          "type": "string",
          "description": "the instrument symbol, e.g. EUR_USD, XBTUSD, BTC_USD, or the exchange-native symbol a TradingView EXCHANGE:TICKER maps to. Required unless line or alert is set"
        },
        "trigger": {
          "type": "number",
          "description": "absolute trigger (stop) price; required for stop and stop_limit",
          "exclusiveMinimum": 0
        },
        "exchange": {
          "enum": [
            "ALPACA",
            "ALPACAPAPER",
            "BINANCE",
            "BINANCEDELIVERY",
            "BINANCEDELIVERYTESTNET",
            "BINANCEFUTURES",
            "BINANCEFUTURESTESTNET",
            "BINANCETEST",
            "BINANCEUS",
            "BITMEX",
            "BITMEXTESTNET",
            "BITFINEX",
            "BITGET",
            "BITGETDEMO",
            "BITGETMIX",
            "BITGETMIXCOPY",
            "BITGETMIXDEMO",
            "BYBIT",
            "BYBITCOPY",
            "BYBITCOPYTESTNET",
            "BYBITSPOT",
            "BYBITSPOTTESTNET",
            "BYBITTESTNET",
            "CAPITAL",
            "CAPITALDEMO",
            "CHARLESSCHWAB",
            "COINBASE",
            "CRYPTO",
            "CRYPTODEMO",
            "DERIBIT",
            "DERIBITTESTNET",
            "GATE",
            "GATEFUTURES",
            "GATEFUTURESTESTNET",
            "GEMINI",
            "GEMINISANDBOX",
            "HUOBI",
            "HUOBIFUTURES",
            "HUOBILINEAR",
            "HUOBISWAP",
            "HYPERLIQUID",
            "HYPERLIQUIDTESTNET",
            "KRAKEN",
            "KRAKENFUTURES",
            "KUCOIN",
            "KUCOINFUTURES",
            "KUCOINFUTURESCOPY",
            "OANDA",
            "OANDAPRACTICE",
            "OKX",
            "OKXDEMO",
            "OKXEEA",
            "OKXEEADEMO",
            "OKXUS",
            "OKXUSDEMO",
            "TRADESTATION",
            "TRADESTATIONSIM",
            "TRADOVATE",
            "TRADOVATESIM"
          ],
          "type": "string",
          "description": "optional — any exchange id known to Autoview (see `catalog`); a bracket is refused if that exchange lists its params as unsupported; omit entirely to skip that check"
        },
        "priceRef": {
          "type": "number",
          "description": "reference price for percent sizing and brackets",
          "exclusiveMinimum": 0
        },
        "quantity": {
          "anyOf": [
            {
              "type": "number",
              "exclusiveMinimum": 0
            },
            {
              "type": "string",
              "pattern": "^(100|[1-9][0-9]?)%$"
            }
          ],
          "description": "order size: a positive number (contracts/units), or a percent-of-balance string like \"50%\" (1-100%). Required unless action is set."
        },
        "stopLoss": {
          "anyOf": [
            {
              "type": "number",
              "exclusiveMinimum": 0
            },
            {
              "type": "string"
            }
          ],
          "description": "attached bracket stop-loss distance from the fill: points (10) or a percent string such as 3%; a sign, if given, must point the right way); pairs with takeProfit or a trail leg"
        },
        "trailStop": {
          "type": "number",
          "description": "auto-trail stop distance in points; requires trailActivate",
          "exclusiveMinimum": 0
        },
        "takeProfit": {
          "anyOf": [
            {
              "type": "number",
              "exclusiveMinimum": 0
            },
            {
              "type": "string"
            }
          ],
          "description": "attached bracket take-profit distance from the fill: points (20) or a percent string such as 5%; pairs with stopLoss or a trail leg"
        },
        "trailActivate": {
          "type": "number",
          "description": "points of profit before the trail starts; required whenever trailStop is set",
          "exclusiveMinimum": 0
        },
        "trailFrequency": {
          "type": "number",
          "description": "how often the trailing stop re-checks price; defaults to 1 if omitted",
          "exclusiveMinimum": 0
        },
        "sizeAgainstEquity": {
          "type": "boolean",
          "description": "for a percent quantity, size against equity instead of available balance (y=equity)"
        }
      }
    }
    arguments 199 lines
  • sandbox_run unknown never probed

    Run one alert through Autoview's Alert Sandbox and see exactly what Autoview would do with it: the parsed orders and a simulated fill for each. No token, no account, no exchange key: simulation only, no real order is placed. Send the order one of two ways: command (alert text: the classic key=value form "e=kraken s=BTCUSD b=buy q=0.01" or a v3 line "buy(BTCUSD, 0.01)"), or order (structured: { "exchange": "oanda", "symbol": "EURUSD", "side": "buy", "qty": 1000 }). Not both. A limit order is { ..., "type": "limit", "limit_price": 50000 }. order takes only exchange, symbol, side, qty, type and limit_price: order.price is refused (order_bad_field), because the top-level price is a different thing, the market price you read, not a limit. To close, send command with c=position (for example "e=kraken s=XBTUSD c=position") and the same sandbox_id: it closes that sandbox_id's paper position on the symbol at market, a long by a sell at the bid and a short by a buy at the ask. Prices. Each fill is priced in this order and labelled with where the price came from (fill.origin): own_key (the user's own connected account; not available yet, coming), venue_ticker (the venue's free public ticker, e.g. Kraken, Coinbase, OKX, Bybit for crypto), caller (a price you pass in price), alert_fp (fp= in the alert, e.g. TradingView {{close}}). If Autoview has no price for the market (stocks, most forex, futures), read the price from your own user's data source and pass it as price (plus price_source and price_time); the fill is then labelled caller-supplied, never presented as Autoview's quote. Returns { sandbox: true, real_order_placed: false, notice, sandbox_id, webhook_url, compiled?, orders: [{ exchange, side, symbol, qty, type, order_price?, fill }], explanation?, next }. Fill shapes. A priced fill is { status: "filled", price, price_label, price_source, origin, origin_note, priced_at, price_age_ms, side_of_book?, limit?, price_warning?, caller_price_source?, caller_price_time? }. price_label is Autoview's short label for where the fill price came from, for example "Kraken XBTUSD best ask" (a venue fill at the ask) or "caller-supplied" (your price). price_source is the same label under its older name, kept for existing readers. The source and time you sent with a caller price are echoed in caller_price_source and caller_price_time. A market order, or a limit the book has reached (a buy limit at or above the ask, a sell limit at or below the bid; with a caller price, at or better than it), fills at the ask, bid or your price, never at the limit. price_warning is set when the price was more than 15 minutes old at receipt (for example "The caller price is 5h 2m old"): the fill still used it, so read a fresh price if you want a current fill. A limit the price has not reached is { status: "not_filled", price: null, reference_price, limit, price_label, side_of_book?, origin, origin_note, note, fix }: nothing filled and the sandbox never fills it later; do not pass price again, read fix. An unpriced fill is { status: "no_price", price: null, note, website_note?, price_error? }: price_error is { code, market, message, fix: [steps] }; follow the fix steps and call again. A c=position close with no open position on that symbol for this sandbox_id is { status: "nothing_to_close", price: null, note }: nothing was filled and there is nothing to fix. price_error codes (in fill.price_error, on a no_price fill): no_live_source (Autoview has no live price for this market or venue; pass price, or set e= to a priced crypto venue), venue_read_failed (the venue's public ticker did not answer; retry, or pass price), price_ambiguous (price was sent with an alert that has more than one symbol; send one symbol per call). bad_price_param is the website's code for malformed price fields; it arrives as the refusal bad_price with price_error beside it. Refusal codes (the whole call returns { error, code, fix }; do what fix says): command_required, command_and_order, bad_v3_line, bad_sandbox_id, order_missing_field, order_bad_field, bad_price, bad_price_source, bad_price_time, price_fields_without_price, sandbox_refused, sandbox_rate_limited, sandbox_bad_answer, sandbox_unreachable, sandbox_timeout, internal_error. sandbox_id is minted when you omit it; pass it back to add more alerts to the same sandbox, and read them with sandbox_results. Any webhook sender can also POST alerts to webhook_url. Call pricing to see what going live costs. Replaying past prices. To test a strategy on history, send one sandbox_run call per signal, oldest first. Set price to the price at that bar from your own data, price_source to where the data came from, and price_time to the bar's time. A past price_time is accepted; one more than a day in the future is refused (bad_price_time). Pass the sandbox_id from the first call on every later call, so all the fills land in one sandbox. Each fill uses your price as sent: fill.origin is caller, origin_note says the source and time are yours and not Autoview's quote, caller_price_time echoes the time you sent, and price_age_ms is how long before receipt that time was. A price more than 15 minutes old also gets price_warning, and the fill still counts. A limit your price has not reached comes back not_filled, and a later call does not fill it. Then call sandbox_results with the same sandbox_id: its book works out the position and realized P&L from the fills in the order they arrived, not by price_time. Every call counts toward the sandbox alert limits; on sandbox_rate_limited, do what fix says. Fill model (every fill carries it as fill_model): each order fills at one snapshot price taken when the alert arrives, either the venue's public ticker (its best ask for a buy and best bid for a sell when the venue gives them, otherwise its last trade) or a price you supply (price, or fp= in the alert). A market order fills at that price. A marketable limit (a buy limit at or above it, a sell limit at or below it) fills at that price, never at the limit; any other limit stays open as not_filled and never fills later. The sandbox does not model order-book depth, slippage, latency or partial fills, and a caller price or last trade carries no spread, so live results will differ. fill.book_size is the size the venue's public ticker showed at that best ask or bid when the price was read, passed on as stored; it is not depth, it does not change the fill, and it is null when the price came with no size (a caller price, fp=, or a venue whose ticker gives none). For live-like execution, use the venue's own testnet or demo account through Autoview (pricing lists them with demo: true, at $0).

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "order": {
          "type": "object",
          "required": [
            "exchange",
            "symbol",
            "side",
            "qty"
          ],
          "properties": {
            "qty": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "string"
                }
              ],
              "description": "positive quantity in the venue's units, e.g. 0.01 (BTC), 1000 (EUR/USD units), 1 (shares)"
            },
            "side": {
              "type": "string",
              "description": "\"buy\" or \"sell\""
            },
            "type": {
              "type": "string",
              "description": "\"market\" (default) or \"limit\""
            },
            "symbol": {
              "type": "string",
              "description": "one ticker with no spaces, as the venue writes it, e.g. \"BTCUSD\", \"EURUSD\", \"AAPL\""
            },
            "exchange": {
              "type": "string",
              "description": "venue id, any spelling, e.g. \"kraken\", \"oanda\", \"alpaca\", \"coinbase_advanced\" (pricing with no exchanges lists every id)"
            },
            "limit_price": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "string"
                }
              ],
              "description": "required when type is \"limit\": the limit price, e.g. 81000. Not the market price you read: that goes in the top-level price"
            }
          },
          "description": "structured order (only these six fields; order.price is refused, use limit_price), rendered to the alert line \"e=<exchange> s=<symbol> b=<side> q=<qty> t=<type>\" (plus fp=<limit_price> for a limit); returned as compiled. Send this or command, not both",
          "additionalProperties": {}
        },
        "price": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "string"
            }
          ],
          "description": "optional current market price you read from your own user's data source for this symbol, e.g. 1.11419 or \"1.11419\" (positive number or decimal string). Used when Autoview has no price for the market; the fill is labelled caller-supplied. Not a limit price: for a limit use order.limit_price (or fp= in command). A price over 15 minutes old still fills, with fill.price_warning"
        },
        "command": {
          "type": "string",
          "description": "alert text, e.g. \"e=kraken s=BTCUSD b=buy q=0.01\" (classic key=value) or \"buy(BTCUSD, 0.01)\" (v3 line). Send this or order, not both"
        },
        "exchange": {
          "type": "string",
          "description": "venue id (any spelling) for a v3 line or alert text with no e=, e.g. \"kraken\""
        },
        "price_time": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "number"
            }
          ],
          "description": "optional, with price: when it was read, ISO-8601 (\"2026-10-28T17:00:00Z\") or epoch milliseconds (1793206684433); not in the future"
        },
        "sandbox_id": {
          "type": "string",
          "description": "an existing sandbox id (32 lowercase hex, e.g. \"6d43316194e3727e2411ef118974be1f\") to reuse; omit to get a new one"
        },
        "price_source": {
          "type": "string",
          "maxLength": 120,
          "description": "optional, with price: where the price came from, up to 120 characters, e.g. \"my OANDA practice account\""
        }
      }
    }
    arguments 96 lines
  • sandbox_results unknown 16h ago

    Read the simulated fills stored for a sandbox_id (from sandbox_run, or any Alert Sandbox webhook id), newest first. No token, no account, no key: simulation only, no real order was placed. Returns { sandbox: true, real_order_placed: false, notice, sandbox_id, alerts: [{ received_at, seq?, orders?: [same shape as sandbox_run orders, including fill.status (filled, not_filled, no_price or nothing_to_close), fill.origin, fill.price_label, fill.price_warning and fill.price_error], error? }], more, book, next_step } where alerts lists the newest 10 and more is true when older alerts exist beyond them. book = { positions: [{ exchange, symbol, net_qty, avg_entry, realized_pnl, last_fill_price, fills }], unvalued: [{ exchange, symbol, count }], unvalued_count, complete, method, note } is worked out on this call from up to 1000 stored alerts (an id with no account holds fewer, so it covers the whole store): average-cost, each market starting flat at its oldest fill read, no cash and no fees; net_qty is negative for a short and avg_entry is null when flat. Fills with no price or a percent qty are counted in unvalued and never valued; complete is false when older fills exist beyond the read. next_step = { market, practice_venue, practice_venue_name, same_venue, free, connect_url, text } names the free testnet or demo venue for the newest order's market and the page where your user connects it; practice_venue is null when Autoview has no match, and free is false when the only demo is not free to open. Pass text to your user as the next step. A refusal returns { error, code, fix }: bad_sandbox_id (malformed id), sandbox_refused (e.g. the id belongs to an account), sandbox_rate_limited, sandbox_bad_answer, sandbox_unreachable, sandbox_timeout, internal_error. Do what fix says. Fill model (every fill carries it as fill_model): each order fills at one snapshot price taken when the alert arrives, either the venue's public ticker (its best ask for a buy and best bid for a sell when the venue gives them, otherwise its last trade) or a price you supply (price, or fp= in the alert). A market order fills at that price. A marketable limit (a buy limit at or above it, a sell limit at or below it) fills at that price, never at the limit; any other limit stays open as not_filled and never fills later. The sandbox does not model order-book depth, slippage, latency or partial fills, and a caller price or last trade carries no spread, so live results will differ. fill.book_size is the size the venue's public ticker showed at that best ask or bid when the price was read, passed on as stored; it is not depth, it does not change the fill, and it is null when the price came with no size (a caller price, fp=, or a venue whose ticker gives none). For live-like execution, use the venue's own testnet or demo account through Autoview (pricing lists them with demo: true, at $0).

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "sandbox_id"
      ],
      "properties": {
        "sandbox_id": {
          "type": "string",
          "description": "the sandbox id sandbox_run returned: 32 lowercase hex, e.g. \"6d43316194e3727e2411ef118974be1f\""
        }
      }
    }
    arguments 13 lines
  • paper_reset unknown never probed

    Start a paper ledger over with a starting balance: sets its cash to balance and clears its positions. Earlier fills stay in its history. Nothing is sent to an exchange. After a reset, each paper fill on that ledger moves cash: a buy takes its notional (quantity x price) from cash and a sell adds its notional; a buy that costs more than the cash fills nothing and entry returns paper_insufficient_cash. Without a reset cash stays null and every order fills. Two forms. With paper_id (the id a no-token paper fill on entry returned) and no token: that one guest ledger. With your user's Autoview account token and no paper_id: the account's paper ledger on exchange, which its first token fill on entry opened or a paper_id claim moved onto the account (paper_ledger_none if there is none). A paper_id claimed by an account no longer works here without the token: reset that ledger with the token form. It also cancels the ledger's open paper limit orders, so none of them fills later against the new cash. Returns { paper_reset: true, exchange, cash, positions: [], cancelled_orders (how many open orders it cancelled), note }. cash is in the quote currency of the symbols traded, unconverted. A refusal returns { error, code }: paper_reset_invalid (exchange missing, or balance not a positive number up to 1000000000000), paper_id_unknown (no guest ledger has that paper_id), paper_id_other_exchange (the ledger is on another exchange), paper_reset_needs_id (neither paper_id nor a token), invalid_token, paper_exchange_out_of_scope (the token is not scoped for that exchange), paper_ledger_none (the account has no paper ledger on that exchange), paper_ledger_unavailable (nothing changed; try again shortly), paper_rate_limited (the paper_id form with no token is limited to 60 per hour from each connection, counted together with paper_ledger; wait until retry_at).

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "exchange",
        "balance"
      ],
      "properties": {
        "token": {
          "type": "string",
          "description": "your Autoview account token — an av_mcp_ personal access token, generate one at /account/tokens/ on the Autoview site. Omit this if your MCP client already sends it as an `Authorization: Bearer` header (Claude Code, Cursor, and most non-browser clients do this automatically once configured). Leave it out when you pass paper_id."
        },
        "balance": {
          "type": "number",
          "maximum": 1000000000000,
          "description": "the starting cash, a positive number in the quote currency of the symbols you trade (e.g. 1000 for 1000 USDT on BTCUSDT)",
          "exclusiveMinimum": 0
        },
        "exchange": {
          "type": "string",
          "description": "the ledger's exchange, e.g. BINANCE; with paper_id it must match the ledger's exchange"
        },
        "paper_id": {
          "type": "string",
          "description": "the paper_id a no-token paper fill on entry returned, 32 hex characters; resets that guest ledger with no token. When paper_id is sent, the token is not used"
        }
      }
    }
    arguments 28 lines
  • send_feedback unknown never probed

    Send your user's feedback to the Autoview team: a feature request, a bug report, a question, or anything else. Works with no account and no token (as a guest), or with your user's token. Each message is saved for a person to review before it goes to the team; there is no set response time. With a token, the account is attached on our side from the token, so do not add it. Never put passwords, API keys or other secrets in message. If your user wants an answer, put a way to reach them in contact (for example an email address), or with a token set contact to true to use the address on the account. Show your user the message and get their go-ahead before sending. message is up to 4000 characters. Limit: 2 per hour for each account, or for each guest. Returns { received, id, status, guest, remaining_this_hour, note }; pass note to your user. A refusal returns { error, code, fix }: bad_kind, message_empty, message_too_long, contact_too_long, invalid_token, feedback_rate_limited (with retry_at), feedback_unavailable, feedback_store_failed. Do what fix says.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "kind",
        "message"
      ],
      "properties": {
        "kind": {
          "enum": [
            "feature_request",
            "bug",
            "question",
            "other"
          ],
          "type": "string",
          "description": "feature_request, bug, question, or other"
        },
        "token": {
          "type": "string",
          "description": "your Autoview account token — an av_mcp_ personal access token, generate one at /account/tokens/ on the Autoview site. Omit this if your MCP client already sends it as an `Authorization: Bearer` header (Claude Code, Cursor, and most non-browser clients do this automatically once configured). Optional here: leave it out to send as a guest."
        },
        "contact": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "boolean"
            }
          ],
          "description": "optional: how to reach your user if they want a reply (for example an email address, up to 254 characters), or true to use the address on the account (token only). Omit for no reply."
        },
        "message": {
          "type": "string",
          "description": "your user's feedback in their own words, up to 4000 characters. For a bug, say what was sent, what happened and what was expected; a trace or canonical_id from events helps."
        }
      }
    }
    arguments 39 lines
  • paper_ledger unknown never probed

    Read a paper ledger back: its open positions, cash and the last fills, newest first. Nothing is sent to an exchange. Three forms. With paper_id (the id a no-token paper fill on entry returned) and no token: that one guest ledger, returned as { paper_ledger: true, exchange, cash, positions: [{ symbol, qty, avg_price, mark, mark_side, quote_at, unrealised_pnl }], fills: [{ symbol, side, qty, price, notional, bid, ask, quote_at, at }], more_fills, orders, note }. orders lists the ledger's newest paper limit orders, any state: [{ order_id, symbol, side, qty, limit_price, state (open, filled or cancelled), at, closed_at }]. Before it answers, the read asks the current quote for each symbol with an open order and fills each open order that quote crosses, at its limit price. Each position is marked at the current quote on its symbol: mark is the bid for a long and the ask for a short (mark_side says which), quote_at is when the quote was read, and unrealised_pnl is (mark - avg_price) x qty. Up to 10 symbols are quoted per ledger, each waiting up to 3 seconds; a position with no quote has mark, quote_at and unrealised_pnl null and a mark_reason (cap when the ledger holds more symbols than that, otherwise the quote's code, such as quote_timeout). With your user's Autoview account token and no paper_id: the account's own paper ledgers, one per exchange, as { paper_ledger: true, ledgers: [{ exchange, cash, positions, fills, more_fills }], note }; ledgers is empty when the account has none yet. With the token and a paper_id: that guest ledger moves onto the account (first claim wins; the reply carries claimed:true on the call that moved it) and is returned in the account form, ledgers holding just that one; this is the only form that writes, and once moved the paper_id no longer works without the token. qty is signed (negative is short); positions that are flat are left out; cash is null until a starting balance is set; amounts are in the symbol's quote currency. more_fills is true when older fills exist beyond limit. A refusal returns { error, code }: paper_id_unknown (no guest ledger has that paper_id), paper_id_other_exchange (exchange names another venue than the ledger's), paper_ledger_needs_id (neither paper_id nor a token), invalid_token, paper_exchange_out_of_scope (the token is not scoped for that exchange), paper_ledger_unavailable (try again shortly), paper_rate_limited (the paper_id form with no token is limited to 60 per hour from each connection, counted together with paper_reset; wait until retry_at), paper_id_claimed (with a token: another account already took that paper_id's ledger), paper_id_not_merged (with a token: the account already has its own paper ledger on that exchange, so it is kept, the guest ledger is not merged, and nothing changed).

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "description": "how many of the newest fills to return, 1 to 100; defaults to 20"
        },
        "token": {
          "type": "string",
          "description": "your Autoview account token — an av_mcp_ personal access token, generate one at /account/tokens/ on the Autoview site. Omit this if your MCP client already sends it as an `Authorization: Bearer` header (Claude Code, Cursor, and most non-browser clients do this automatically once configured). With paper_id as well, it moves that guest ledger onto the account."
        },
        "exchange": {
          "type": "string",
          "description": "optional: with a token, read only the ledger on this exchange (e.g. GEMINI); with paper_id, it must match the ledger's exchange"
        },
        "paper_id": {
          "type": "string",
          "description": "the paper_id a no-token paper fill on entry returned, 32 hex characters; with no token reads that guest ledger, with a token moves it onto the account and reads it"
        }
      }
    }
    arguments 24 lines
  • explain_command unknown never probed

    Explain an existing Autoview command / alert message in plain English: what the engine will actually do with it on the named exchange (side, size, order type, price, brackets, account, dry run), plus caveats where that exchange quietly downgrades or ignores a key, or where the engine refuses the line. For example, Alpaca, Binance, Binance Delivery, ByBit Copy, Capital.com, Charles Schwab, OANDA and Tradovate have no post-only order, so the engine refuses t=post there and sends nothing, because the order would go out as a plain limit order that can fill at once; send t=limit for a plain limit. Accepts the classic key=value form (several lines, | or & legs included) or a one-line v3 call like buy(BTCUSD, 0.1, -1%). Returns { explanation: string, lines: [{ line, text, caveats: [{ text }], venue }] } or { error }. Read-only: it parses text only, never reads an account, a key, or sends anything. Describes, never recommends. No token, no account: works for a guest. To see a simulated fill beside the explanation, use sandbox_run.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "command"
      ],
      "properties": {
        "token": {
          "type": "string",
          "description": "not needed: explain_command reads no account data and ignores any token sent"
        },
        "command": {
          "type": "string",
          "description": "the alert message / command string to explain, e.g. e=kraken s=BTCUSD b=buy q=0.1 p=-1% t=post"
        },
        "exchange": {
          "type": "string",
          "description": "exchange id (any spelling) to explain against when a line carries no e="
        }
      }
    }
    arguments 21 lines
  • revoke_token unknown never probed

    Revoke the token this call is made with, so it stops working at once: every later call with it is refused. It only ever revokes the calling token (there is no target to pass), never another token of the account. Already revoked or expired counts as done (ok, already_revoked:true), not as an error. Needs the token's "Allow revoke and unlink" permission, which is off until your user ticks it at /account/tokens/. Requires your Autoview account token.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "token": {
          "type": "string",
          "description": "your Autoview account token — an av_mcp_ personal access token, generate one at /account/tokens/ on the Autoview site. Omit this if your MCP client already sends it as an `Authorization: Bearer` header (Claude Code, Cursor, and most non-browser clients do this automatically once configured)."
        }
      }
    }
    arguments 10 lines
  • unlink unknown never probed

    Remove one of your hooks, the same as deleting it by hand on autoview.com: its exchange links, then the hook itself (alerts sent to its URL stop placing orders), then any saved exchange API keys no other hook still uses (real-money keys included; keys another hook links are kept). The token must be scoped for every exchange the hook links, and a hook linking a real-money exchange needs a live-scoped token, the same as connect. One transaction, all or nothing. A hook that is already gone, or is not on your account, is reported as ok with already_gone:true and nothing is deleted. Needs the token's "Allow revoke and unlink" permission, which is off until your user ticks it at /account/tokens/. Requires your Autoview account token.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "hook_id"
      ],
      "properties": {
        "token": {
          "type": "string",
          "description": "your Autoview account token — an av_mcp_ personal access token, generate one at /account/tokens/ on the Autoview site. Omit this if your MCP client already sends it as an `Authorization: Bearer` header (Claude Code, Cursor, and most non-browser clients do this automatically once configured)."
        },
        "hook_id": {
          "type": "string",
          "description": "the hook to remove: one of your hooks (see the `hooks` tool)"
        }
      }
    }
    arguments 17 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id a1c084a48002ca44.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/a1c084a48002ca44/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/a1c084a48002ca44/badge.svg)](https://brick.blue/agent/a1c084a48002ca44?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.