Skip to main content

Tool reference

Constance serves the tools below over MCP and uses the same ones behind the terminal chat and Telegram. Every tool is read-only except the three marked write under Alerts.

Scope

Two ids drive almost everything: In the tables, scope says which of the two a tool takes:
  • account: exchange_account_id only
  • portfolio: portfolio_id only
  • either: pass one of the two; the account slug for one account, the portfolio id for the whole book
  • none: no user scope, market data or your plan
Dates are ISO (2026-08-01) unless a parameter says epoch milliseconds. page counts from 0. Trailing windows default to 12 months. Series are downsampled to at most 60 points.

Accounts and NAV

PnL and history

Risk

Positions

DeFi

The per-account DeFi ledger and the on-chain transaction index can both come back empty for a wallet whose DeFi value still shows in get_defi_attribution. An empty result from get_defi_summary or a zero from get_defi_transactions is not proof of no DeFi activity. For portfolio-wide DeFi value and PnL, get_defi_attribution is the source to trust.

Perps and funding

Your own payments and PnL: Market rates, no user scope:

Attribution and strategies

Activity

Market data

No user scope.

Custom queries

Allowed stages: $match, $group, $sort, $project, $limit, $skip, $unwind, $addFields, $count, $bucket, $facet, $sample. The ledgers collection holds one document per account with nav_raw, gross_nav, total_pnl_realized, total_pnl_unrealized, total_fees and exchange_account_id.

Internet

Neither tool is for your own balances, NAV, PnL or positions. Only the portfolio tools answer those correctly, and your figures should not go into a search query.

Alerts

Alerts run server-side, 24/7, on your own data. They notify in the chat that created them: a web alert reaches the bell in the terminal, a Telegram alert goes back to that chat. Alerts created over MCP use the in_app channel by default and show up in the terminal’s bell.

Threshold

Fires when a metric on an account or portfolio goes ABOVE or BELOW a number, once per crossing. It re-arms when the condition clears, and cooldown_minutes suppresses a quick re-crossing. Parameters: kind: "threshold", metric, operator, threshold, asset (for asset_balance).

Transfer

Fires when a deposit or withdrawal lands on an exchange account, optionally for one asset. Parameters: kind: "transfer", scope: "exchange_account", direction (deposit default, withdrawal), asset.

Digest

Sends the current values of chosen fields on a clock, rather than when something crosses a value. Parameters: kind: "digest", fields (default ["nav"]; also pnl_total, unrealized_pnl, drawdown, volatility), currency (a second column converted from USD: EUR, CHF, JPY, BTC, ETH), style (date ymd, dmy or mdy; clock 24h or 12h; money code or symbol). Timing, pick one: at is local wall-clock time in tz, an IANA zone like Europe/Vienna. It survives daylight-saving changes. Default UTC.
Over MCP, digests report the standard fields. The saved-layout and watch recipes that the terminal and Telegram chats support need a chat with a connected identity and are not available from an MCP client.