Skip to content

MCP tool reference

AUTO-GENERATED from the live Crank FastMCP registry by docs/gen_tool_reference.py. Do not hand-edit -- change the tool docstring in crank_mcp/ and regenerate.

196 tools are registered on the Crank MCP server.

Every tool accepts a caller_id string (your agent identity, used for rate-limiting and usage analytics) and returns a structured envelope: {"ok": true, ...} on success or {"ok": false, "error": {"code", "message"}} on failure. Reads are free; value-bearing actions are metered by the x402 payment rail past a daily free tier (see the authentication guide).

Categories

Account & portfolio reads

Free read-only orientation tools. No fee, no on-chain action.

get_balances

Wallet token balances (SOL + all SPL tokens) with USD valuations.

detail="concise" (default) returns total_usd + count + balances trimmed to token/symbol/usd_value (IDs for chaining into e.g. get_quotes); "full" returns every field (amount, price_usd) as before.

Workflow: ORIENT step -- the starting read for any flow. See get_trading_workflow.

Param Type Required Default
wallet_address string yes
detail string no "concise"

Fee: free (read-only / control-plane). No x402 payment.

portfolio_snapshot

Full portfolio summary: positions, total value, allocation %, 24h change.

Persisted as a PortfolioSnapshot for historical tracking. detail="concise" (default) returns total_value_usd/change_24h_pct/snapshot_id + up to the top 10 positions (token/symbol/usd_value -- IDs for chaining); "full" returns every position with amount/price_usd and the complete allocation_pcts map, as before.

Workflow: ORIENT step -- the denominator for position sizing. Call before intelligence/risk so sizes are net of current holdings. See get_trading_workflow.

Param Type Required Default
wallet_address string yes
detail string no "concise"

Fee: free (read-only / control-plane). No x402 payment.

get_transaction_history

Recent transactions for a wallet, parsed + human-readable (limit 1-100).

detail="concise" (default) trims each row to signature/type/timestamp/ status (signature is the ID to chain into journal_append's tx_signature); "full" adds description, tokens_involved, token_mints, and amount.

Param Type Required Default
wallet_address string yes
limit integer no 20
detail string no "concise"

Fee: free (read-only / control-plane). No x402 payment.

token_info

Token metadata, price, liquidity, volume, holder count.

Provide token_address (mint) or a known symbol. Merges Helius (metadata) with Birdeye (market data).

Free (no technology service fee) -- a read with no transaction notional.

Param Type Required Default
token_address string | null no
symbol string | null no

Fee: free (read-only / control-plane). No x402 payment.

verify_token

Multi-layer authenticity check for a token mint (read-only, no execution).

Runs the same five-layer verification the swap/trade tools enforce before building a transaction: registry allow-list, Jupiter verified list, Metaplex metadata authority, minimum liquidity, and token age + holder count. Returns verification_status (verified | unverified | suspicious | blocked), the reasons, non-blocking warnings, and the per-layer findings. Call this before swapping into an unfamiliar token.

Param Type Required Default
token_address string yes
symbol string | null no

Fee: free (read-only / control-plane). No x402 payment.

asset_classification

Classify a token: crypto / equity / wrapped_major / lst / stablecoin.

Provide token_address (mint) or a known symbol. Tokenized securities (xStocks, Ondo) classify as 'equity', which subjects strategies to the SEC framework guardrails (neutral tools, per-execution confirmation for discretionary types). Registry-authoritative with a static + symbol fallback. Factual classification only -- not a recommendation.

Workflow: RISK/COMPLIANCE step -- classify before executing; 'equity' forces geo-gating + per-execution confirm. Pairs with get_disclaimers. See get_trading_workflow.

Param Type Required Default
token_address string | null no
symbol string | null no

Fee: free (read-only / control-plane). No x402 payment.

get_token_classification

Standardised tokenized-stock classification for a mint or symbol.

Read-only. Returns every classification dimension -- backing_status (fully/treasury backed, synthetic, unknown), liquidity_tier (tier_1/2/3 / illiquid, from Jupiter price impact), issuer_verified (Metaplex authority match), market_data_quality (live/stale/none) -- plus the derived composite risk (low/medium/high/blocked) and last_verified_at. FAIL-SAFE: a registered but unscored token, an inactive token, or an unregistered token reports tradeable=false. trade_equity enforces this same composite risk.

Param Type Required Default
mint_or_symbol string yes

Fee: free (read-only / control-plane). No x402 payment.

get_disclaimers

Compliance disclaimers for an asset class (SEC framework).

Pass asset_classification (crypto/equity/wrapped_major/lst/stablecoin), or a token_address/symbol to classify first. Equity adds a securities-specific non-registration / not-advice notice. Full text: crank.ing/disclosures.

Param Type Required Default
asset_classification string | null no
token_address string | null no
symbol string | null no

Fee: free (read-only / control-plane). No x402 payment.

get_usage_report

An agent's own premium-feature spend report (FREE read).

Returns per-feature {calls, spend_usd, cost_usd} plus totals from the FeatureUsage ledger. period: today | 7d | 30d | all (default 30d).

Param Type Required Default
wallet_address string yes
period string no "30d"

Fee: free (read-only / control-plane). No x402 payment.

Swaps

Spot token swaps routed through Jupiter (non-custodial).

get_quotes

Read-only Jupiter quote for a token pair (no execution).

amount is in base units of input_token. Returns routes, price impact, fees, and estimated output. venue_hint is ADVISORY, never required -- see jupiter_swap.

Pass wallet_address (optional) to preview the DISCOUNTED technology service fee that wallet will actually pay -- its volume tier plus $CRANK staker / pay_in_crank / Crank Score discounts. Omit it for the base rate. This stays a free read either way.

slippage_bps omitted (None) resolves to the published platform default of 50 bps -- unchanged from before; the returned envelope's slippage.applied_source honestly reports "platform_default" in that case rather than falsely claiming "caller".

include_slippage_advisory (default False) adds the venue's own suggested tolerance for this route to the slippage block (suggested_bps / suggestion / advisory_status). Opt-in because it costs one extra venue round trip (~400 ms measured); requires wallet_address. Advisory only -- applied_bps is always exactly what executes.

Param Type Required Default
input_token string yes
output_token string yes
amount integer yes
slippage_bps integer | null no
venue_hint string | null no
wallet_address string no ""
pay_in_crank boolean no false
include_slippage_advisory boolean no false

Fee: free (read-only / control-plane). No x402 payment.

jupiter_swap

Execute a token swap via Jupiter (non-custodial).

submit_mode (optional): your execution preference. Omitted/"public" = public-RPC broadcast (default, unchanged). "mev_protected" = the tx is built with a Jito tip you pay (jito_tip_lamports, default 10,000) and relayed to the Jito block engine as a bundle. Use the same mode on build and broadcast. A failed protected submit returns an error and is NOT sent publicly unless you set mev_fallback_public=true. The response execution block names the mode and tip. Mainnet only. Never selected for you.

Without signed_transaction: returns an UNSIGNED base64 transaction for your wallet to sign + broadcast. With signed_transaction: broadcasts the caller-signed tx and returns tx_signature. amount is in base units of input_token. Includes the Crank technology service fee when a referral fee account is configured -- collected ON-CHAIN via Jupiter's platformFeeBps, deducted from swap output. Swaps are NOT additionally gated by x402 (that would double-charge the same fee), so payment_header stays a no-op here (jupiter_swap is not in x402 PAID_TOOLS). pay_in_crank is NO LONGER a no-op: the on-chain rate is now derived from this wallet's volume tier and $CRANK staker / pay-in-$CRANK / Crank Score discounts, so a discounted wallet is quoted a lower platformFeeBps -- the same schedule x402 applies to perps/lend/stake.

slippage_bps omitted (None) resolves to the published platform default of 50 bps -- unchanged from before; the returned envelope's slippage.applied_source honestly reports "platform_default" in that case rather than falsely claiming "caller".

SECURITY: the output_token is run through multi-layer authenticity verification before any tx is built; an unverified/suspicious/fake token is blocked (UNVERIFIED_TOKEN). Set allow_unverified=true to trade an unverified token at your own risk (hard scam signals are never overridable).

venue_hint is ADVISORY, never required -- spot routes via Jupiter aggregation (the only spot venue today); an unknown hint raises, omitting it is unchanged from before.

Workflow: EXECUTE step -- deploy the directional/allocation leg after the risk phase capped the size. Non-custodial. Get a price first with get_quotes. See get_trading_workflow.

idempotency_key (optional): a client-generated UUID. Retrying the SAME call (build or broadcast) with the same key + same args replays the original result instead of re-executing -- guards against a timeout-then-retry double-swap. Reuse the SAME key across the build call and its signed_transaction broadcast retry (they dedupe independently); a NEW key means a genuinely new swap.

verify (default True): when broadcasting (signed_transaction supplied), await on-chain confirmation and re-read the output_token balance -- the response gains a verification block ({confirmed, slot, post_state, expected_vs_actual}). Gate follow-on decisions on verification.confirmed, never on tx_signature alone. Set False to skip for latency-sensitive callers. Verify any prior signature later with the standalone verify_transaction tool.

GEO GATE: when either leg is a tokenized security this call is geo-gated (Reg S = no US persons) and OFAC-screened, same control trade_equity enforces -- jurisdiction declares the caller's jurisdiction once (persisted for next time), ip is the caller's origin IP for the additional Reg-S IP layer. Non-security swaps are unaffected.

Param Type Required Default
input_token string yes
output_token string yes
amount integer yes
wallet_address string yes
slippage_bps integer | null no
signed_transaction string | null no
allow_unverified boolean no false
venue_hint string | null no
verify boolean no true
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""
jurisdiction string | null no
ip string no ""
submit_mode string | null no
jito_tip_lamports integer | null no
mev_fallback_public boolean no false

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

Perps (multi-venue adapter)

Venue-agnostic perps via the venue router (Jupiter primary; Drift / Pacifica gated). Writes return an unsigned tx or a signing payload.

place_perp_order

Open a leveraged perp position on the best/selected venue (non-custodial).

side is "long" | "short". market e.g. SOL-PERP; size_usd is notional USD. venue optional -- defaults to the configured primary (Jupiter Perps), with health failover to the fallback for new orders. Returns an UNSIGNED tx (Tier A) or a signing payload (Tier B) for your wallet to sign + broadcast, plus venue_name / custody_tier / settlement_token. Tier B (venue-custodied) venues require acknowledge_tier_b=true after reviewing custody_disclosure. Fee charged on size_usd notional past the daily free tier (x402).

jurisdiction: your ISO-3166-1 alpha-2 country code, self-declared -- perps are geo-gated (no US persons, unknown jurisdiction DENIED). Declare once here (or via declare_jurisdiction/trade_equity) and it is remembered 90 days.

Workflow: EXECUTE step (leveraged directional leg) -- after get_venue_health / get_venue_risk_score clear the venue and get_risk_assessment caps the size. Monitor via perp_positions. See get_trading_workflow.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-opening the order. Reuse the SAME key across the build call and its signed_transaction completion call -- the two legs dedupe independently, so this never raises IDEMPOTENCY_CONFLICT; a NEW key means a genuinely new order.

signed_transaction / verify (two-phase execution): re-call this tool with the SIGNED payload and Crank relays it by custody tier -- Tier A to Solana RPC, then awaits on-chain confirmation and re-reads the position on the executing venue; Tier B to the venue's own submit endpoint, which returns a venue order id (reported as venue-acknowledged, since it is not an on-chain signature). Gate follow-on decisions on verification.confirmed, never on tx_signature alone.

venue_action (optional, completion leg only): the value the BUILD leg recorded on extra['venue_action'] -- pass it back alongside signed_transaction so Crank relays the bytes under the venue action the venue itself named (e.g. Jupiter's create-limit-order, for a keeper-co-signed build that can only land via the venue's execute endpoint). Omit it and Crank reads the signed bytes' own message header: caller-completable bytes go to Solana RPC, but keeper-co-signed bytes need a venue action, which is then derived from order_type alone (limit -> create-limit-order, market -> increase-position). On the completion leg order_type is therefore load-bearing and is NEVER defaulted: omit both it and venue_action on keeper-co-signed bytes and the call is refused with a re-build instruction rather than relayed under a guessed action. Always round-trip the build response's extra['venue_action'].

order_type: "market" | "limit". Omitted on the BUILD leg it defaults to "market" (unchanged); omitted on the completion leg it stays unset (see venue_action above).

Param Type Required Default
wallet_address string yes
market string yes
side string yes
size_usd number yes
leverage number yes
order_type string | null no
limit_price number | null no
take_profit_price number | null no
stop_loss_price number | null no
venue string | null no
acknowledge_tier_b boolean no false
signed_transaction string | null no
venue_action string | null no
verify boolean no true
jurisdiction string | null no
ip string no ""
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

close_perp_position

Close a perp position (full/partial) on its venue (non-custodial).

position_id is venue-native (for Drift it is the market symbol). close_pct in (0, 100]. Returns an UNSIGNED tx / signing payload to sign + broadcast.

jurisdiction: closes are geo-gated too -- see place_perp_order.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-closing the position. Reuse the SAME key across the build call and its signed_transaction completion call -- see place_perp_order; the two legs dedupe independently, so this never raises IDEMPOTENCY_CONFLICT.

signed_transaction / verify (two-phase execution): see place_perp_order -- re-call with the signed payload and Crank relays it by custody tier and verifies the result.

venue_action (optional, completion leg only): see place_perp_order -- pass back the build leg's extra['venue_action'] (e.g. Jupiter's decrease-position) so the relay route is the venue's own declared one instead of one inferred from the signed bytes.

Param Type Required Default
wallet_address string yes
position_id string yes
close_pct number no 100.0
venue string | null no
acknowledge_tier_b boolean no false
signed_transaction string | null no
venue_action string | null no
verify boolean no true
jurisdiction string | null no
ip string no ""
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

cancel_perp_order

Cancel a resting perp order on its venue (non-custodial).

jurisdiction: cancel is geo-gated too -- see place_perp_order.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-cancelling the order. Reuse the SAME key across the build call and its signed_transaction completion call -- see place_perp_order; the two legs dedupe independently, so this never raises IDEMPOTENCY_CONFLICT.

signed_transaction / verify (two-phase execution): see place_perp_order. A cancel moves no position, so confirming the signature landed IS the verification -- no state re-read is declared.

venue_action (optional, completion leg only): see place_perp_order -- pass back the build leg's extra['venue_action'] (e.g. Jupiter's cancel-limit-order) so the relay route is the venue's own declared one instead of one inferred from the signed bytes.

Param Type Required Default
wallet_address string yes
order_id string yes
venue string | null no
acknowledge_tier_b boolean no false
signed_transaction string | null no
venue_action string | null no
verify boolean no true
jurisdiction string | null no
ip string no ""
idempotency_key string no ""

Fee: free (read-only / control-plane). No x402 payment.

set_perp_tpsl

Set, amend or cancel a take profit / stop loss on an ALREADY-OPEN perp position (non-custodial).

place_perp_order can attach TP/SL only inline on the order that OPENS a position; this adds one to a position that is already open. Currently supported on Jupiter Perps (position_id = the position pubkey, as returned by perp_positions_all); other venues are refused.

At least one of take_profit_price / stop_loss_price is required. size_pct in (0, 100] is how much of the position the trigger closes. Both are passed through exactly as given -- Crank never chooses or adjusts a trigger price or size. Returns an UNSIGNED transaction to sign; Crank never signs.

jurisdiction: geo-gated like every perps write, including the AU block -- see place_perp_order.

idempotency_key (optional): see cancel_perp_order -- reuse the same key across the build call and its signed_transaction completion call.

signed_transaction / verify (two-phase execution): see place_perp_order. A TP/SL moves no position when set, so confirming the signature landed IS the verification.

venue_action (optional, completion leg only): pass back the build leg's extra['venue_action'] (Jupiter's create-tpsl / update-tpsl, or None when the caller can broadcast itself) so the signed bytes are relayed through the venue's own execute endpoint when the build needs it.

AMEND / CANCEL a resting trigger: read its request_id off perp_positions_all (positions[].tpsl_triggers[].request_id), then call this tool with request_id and either trigger_price (amend -- moves the trigger to that price) or cancel=True (cancel it). position_id and take_profit_price/stop_loss_price are not used in those modes, and mixing them with request_id is refused. Same gates (including the AU block), same two-phase flow -- pass the same request_id / cancel on the completion call.

Permission mode: an on-chain ACTION, not a configuration write -- it is ladder-gated like every value-bearing tool, so observe denies it (PERMISSION_MODE_BLOCKED) and propose defers it.

Param Type Required Default
wallet_address string yes
position_id string no ""
take_profit_price number | null no
stop_loss_price number | null no
size_pct number no 100.0
venue string | null no
acknowledge_tier_b boolean no false
signed_transaction string | null no
venue_action string | null no
verify boolean no true
jurisdiction string | null no
ip string no ""
idempotency_key string no ""
request_id string | null no
trigger_price number | null no
cancel boolean no false

Fee: free (read-only / control-plane). No x402 payment.

perp_positions_all

Open perp positions for a wallet. venue=None aggregates across venues.

Each position carries its venue + custody_tier. detail="concise" (default) trims each position to position_id/market/side/size/unrealized_pnl/venue (position_id is the ID to chain into close_perp_position) plus tpsl_triggers -- the TP/SL triggers resting on the position, each with the request_id set_perp_tpsl takes to amend or cancel it; "full" adds entry_price/current_price/leverage/liquidation_price/custody_tier.

Param Type Required Default
wallet_address string yes
venue string | null no
detail string no "concise"

Fee: free (read-only / control-plane). No x402 payment.

perp_markets_all

Perp markets across venues (venue=None aggregates all routable venues).

detail="concise" (default) trims each market to symbol/venue/price/ max_leverage (symbol is the ID to chain into place_perp_order); "full" adds base/quote/custody_tier/min_size/open_interest_usd.

Param Type Required Default
venue string | null no
detail string no "concise"

Fee: free (read-only / control-plane). No x402 payment.

perp_funding_rates_all

Normalized funding/borrow rates across venues (venue=None aggregates).

Param Type Required Default
venue string | null no
market string | null no

Fee: free (read-only / control-plane). No x402 payment.

get_venue_status

Health + capabilities of every perps venue, plus routing config.

Reports primary/fallback venue, which venues are routable, per-venue health (operational/degraded/down/disabled), and capability flags incl custody tier.

No parameters (besides caller_id).

Fee: free (read-only / control-plane). No x402 payment.

Perps (legacy Drift surface)

Back-compat Drift-only perp_* tools. Prefer the multi-venue surface above for new integrations.

perp_open_long

Open a leveraged LONG perp position on Drift (non-custodial).

Returns an UNSIGNED base64 transaction for your wallet to sign + broadcast, plus entry/liquidation/margin estimates. market e.g. SOL-PERP. size_usd is notional USD; leverage up to the market max. TP/SL are informational in the build — place them as trigger orders after the position opens. The fee is charged on size_usd notional past the daily free tier (x402 payment_header).

jurisdiction: your ISO-3166-1 alpha-2 country code, self-declared -- perps are geo-gated (CFTC posture: no US persons, unknown jurisdiction DENIED). Pass it once here (or via declare_jurisdiction/trade_equity) and it is remembered for 90 days; every perps/short/leverage call is denied until declared.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-opening the position. Reuse the SAME key across the build call and its signed_transaction completion call -- the two legs dedupe independently (the completion leg is namespaced under its own storage key, matching jupiter_swap's build/broadcast pattern), so this never raises IDEMPOTENCY_CONFLICT; a NEW key means a genuinely new order.

signed_transaction / verify (two-phase execution): re-call this tool with the SIGNED base64 tx and Crank broadcasts it, then awaits on-chain confirmation and re-reads the perp position -- the response carries a real verification block ({confirmed, slot, post_state, expected_vs_actual}). Gate follow-on decisions on verification.confirmed, never on tx_signature alone. verify=false skips only the confirmation wait.

Param Type Required Default
wallet_address string yes
market string yes
size_usd number yes
leverage number yes
take_profit_price number | null no
stop_loss_price number | null no
allow_unverified boolean no false
signed_transaction string | null no
verify boolean no true
jurisdiction string | null no
ip string no ""
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

perp_open_short

Open a leveraged SHORT perp position on Drift (non-custodial).

Same envelope as perp_open_long, opposite direction. jurisdiction, idempotency_key (optional) and signed_transaction/verify (two-phase execution): see perp_open_long.

Param Type Required Default
wallet_address string yes
market string yes
size_usd number yes
leverage number yes
take_profit_price number | null no
stop_loss_price number | null no
allow_unverified boolean no false
signed_transaction string | null no
verify boolean no true
jurisdiction string | null no
ip string no ""
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

perp_close

Close a perp position, full or partial (non-custodial).

close_pct in (0, 100]. Returns an UNSIGNED base64 tx to sign + broadcast, plus exit price + realized P&L estimate (incl funding). Past the daily free tier an x402 payment_header is required.

jurisdiction: closes are geo-gated too -- see perp_open_long.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-closing the position.

signed_transaction / verify (two-phase execution): see perp_open_long -- re-call with the signed tx and Crank broadcasts it, confirms it on-chain, and re-reads the position.

Param Type Required Default
wallet_address string yes
market string yes
position_id integer | null no
close_pct number no 100.0
signed_transaction string | null no
verify boolean no true
jurisdiction string | null no
ip string no ""
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

perp_modify

Modify an existing open Drift ORDER by order_id (non-custodial).

Adjusts trigger price (TP/SL). new_leverage / add_collateral require a separate collateral deposit/withdraw and are recorded for tracking. Returns an UNSIGNED base64 tx to sign + broadcast. Past the daily free tier an x402 payment_header is required.

jurisdiction: modify (changes leverage/ exposure) is geo-gated too -- see perp_open_long.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-modifying the order.

Param Type Required Default
wallet_address string yes
order_id integer yes
new_leverage number | null no
add_collateral number | null no
new_tp number | null no
new_sl number | null no
jurisdiction string | null no
ip string no ""
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

perp_positions

List open perp positions for a wallet with live P&L.

Each: market, side, size, entry/mark price, unrealized P&L (incl funding), liquidation price.

Param Type Required Default
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

perp_markets

Available Drift perp markets with price, open interest, funding, max leverage.

No parameters (besides caller_id).

Fee: free (read-only / control-plane). No x402 payment.

perp_funding_rates

Current funding for a perp market (rate, period, last funding timestamp).

market e.g. SOL-PERP. period is informational (1h/8h/24h).

Param Type Required Default
market string yes
period string no "1h"

Fee: free (read-only / control-plane). No x402 payment.

Lending & borrowing

Supply, borrow, repay, flash-loan on Kamino / Marginfi (non-custodial).

lend_deposit

Deposit assets to earn yield on Kamino or Marginfi (non-custodial).

Returns an UNSIGNED base64 tx to sign + broadcast, plus supply APY. amount is in base units of token. protocol: kamino | marginfi -- pin one to keep exact prior behaviour. Marginfi needs marginfi_account (create via the sidecar). Past the daily free tier an x402 payment_header is required. The deposited token is authenticity-verified first; set allow_unverified=true to supply an unverified token at own risk.

venue_hint / auto-route: pass protocol="auto" (or "") -- optionally with venue_hint as an advisory alias, same naming as jupiter_swap/trade_equity -- to route through the SAME primary+fallback health-failover the earn/lending trade bridge already applies: an empty rate snapshot on the primary protocol fails over to the configured fallback. Extends this tool instead of adding a separate earn_quote/trade_earn surface, so lend_deposit is now the one first-class MCP path for both a pinned protocol and an auto-routed deposit. A router-resolved call also carries the smart-contract counterparty-risk disclosure in the response (disclosures), matching that bridge.

Workflow: EXECUTE step (yield leg) -- supply idle stables/tokens after comparing get_lending_rates; monitor with get_health_factor. See get_trading_workflow.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-depositing. Reuse the SAME key across the build call and its signed_transaction completion call -- the two legs dedupe independently, so this never raises IDEMPOTENCY_CONFLICT; a NEW key means a genuinely new deposit.

signed_transaction / verify (two-phase execution): re-call this tool with the SIGNED base64 tx and Crank broadcasts it, then awaits on-chain confirmation and re-reads BOTH the deposited token's balance and the obligation's health -- the response carries a real verification block ({confirmed, slot, post_state, expected_vs_actual}). Gate follow-on borrowing on verification.confirmed, never on tx_signature alone. verify=false skips only the confirmation wait. When the build leg auto-routed (protocol="auto"), pass back the SAME resolved protocol the build response reported -- re-resolving from "auto"/ venue_hint again on the completion leg could pick a different venue if health changed between calls.

Param Type Required Default
protocol string yes
token string yes
amount integer yes
wallet_address string yes
market string | null no
marginfi_account string | null no
allow_unverified boolean no false
signed_transaction string | null no
verify boolean no true
venue_hint string | null no
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

lend_borrow

Borrow against deposited collateral (non-custodial).

Returns an UNSIGNED base64 tx + current health factor (pre-borrow estimate). amount in base units of borrow_token. Deposit collateral first. Past the daily free tier an x402 payment_header is required. The borrowed token is authenticity-verified first; set allow_unverified=true to borrow an unverified token at your own risk.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-borrowing. Reuse the SAME key across the build call and its signed_transaction completion call -- see lend_deposit; the two legs dedupe independently, so this never raises IDEMPOTENCY_CONFLICT.

signed_transaction / verify (two-phase execution): see lend_deposit -- re-call with the signed tx and Crank broadcasts it, confirms it on-chain, and re-reads the borrowed balance + obligation health.

Param Type Required Default
protocol string yes
collateral_token string yes
borrow_token string yes
amount integer yes
wallet_address string yes
market string | null no
marginfi_account string | null no
allow_unverified boolean no false
signed_transaction string | null no
verify boolean no true
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

lend_repay

Repay borrowed amount (non-custodial). Returns an UNSIGNED base64 tx + current health factor. amount in base units of token. Past the daily free tier an x402 payment_header is required.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-repaying. Reuse the SAME key across the build call and its signed_transaction completion call -- see lend_deposit; the two legs dedupe independently, so this never raises IDEMPOTENCY_CONFLICT.

signed_transaction / verify (two-phase execution): see lend_deposit -- re-call with the signed tx and Crank broadcasts it, confirms it on-chain, and re-reads the repaid balance + obligation health.

Param Type Required Default
protocol string yes
token string yes
amount integer yes
wallet_address string yes
market string | null no
marginfi_account string | null no
signed_transaction string | null no
verify boolean no true
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

get_lending_rates

Compare supply/borrow rates across Kamino + Marginfi.

Each row: protocol, token mint, symbol, supply/borrow APY %, TVL USD, utilization. detail="concise" (default) drops tvl_usd/utilization (token is the ID to chain into lend_deposit); "full" returns every field.

Workflow: YIELDS step -- the passive-return option for idle/low-conviction capital (lending USDC removes price exposure). Pairs with get_lst_yields. See get_trading_workflow.

Param Type Required Default
detail string no "concise"

Fee: free (read-only / control-plane). No x402 payment.

get_health_factor

Liquidation-risk monitor for a lending position.

Returns health_factor (>1 safe, <1 liquidatable), collateral value, debt value, liquidation threshold. protocol: kamino | marginfi.

Param Type Required Default
wallet_address string yes
protocol string yes
market string | null no
marginfi_account string | null no

Fee: free (read-only / control-plane). No x402 payment.

set_liquidation_alert

Arm a liquidation alert: notify when a lending obligation's health factor falls to or below threshold.

protocol: kamino | marginfi (marginfi_account required for marginfi). threshold is the HF level (e.g. 1.2 warns before the <1.0 liquidation point). Evaluated every 30s by Celery beat; webhook_url is POSTed on trip.

Workflow: MONITOR step -- arm after opening a leveraged/borrow position so a deteriorating obligation loops you back to repay/de-risk. Pairs with get_health_factor. See get_trading_workflow.

Permission mode: a configuration write -- allowed in every permission_mode, observe included; the ladder gates value-bearing actions, not config.

Param Type Required Default
wallet_address string yes
protocol string yes
threshold number yes
market string | null no
marginfi_account string | null no
webhook_url string | null no

Fee: free (read-only / control-plane). No x402 payment.

flash_loan

Marginfi flash loan for arbitrage (non-custodial, atomic).

instructions are JSON ix executed between borrow + repay legs. Returns a single UNSIGNED base64 tx that reverts unless repaid in-transaction. The borrowed token is authenticity-verified first; set allow_unverified=true to borrow an unverified mint at your own risk. Past the daily free tier an x402 payment_header is required.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-issuing the flash loan tx.

Param Type Required Default
token string yes
amount integer yes
instructions array<object> yes
wallet_address string yes
marginfi_account string yes
allow_unverified boolean no false
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

Liquid staking

Stake / unstake / swap LSTs via Marinade / Jito / Sanctum.

liquid_stake

Stake SOL for a liquid-staking token (non-custodial).

amount in lamports. protocol: marinade | jito | blaze. Returns an UNSIGNED base64 tx + the LST received + current APY. The technology service fee is charged on the staked-SOL notional past the daily free tier (x402 payment_header; set pay_in_crank for the $CRANK discount).

Workflow: EXECUTE step (yield leg) -- stake the idle slice after comparing get_lst_yields. Non-custodial. Monitor via portfolio_snapshot. See get_trading_workflow.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-staking. Reuse the SAME key across the build call and its signed_transaction completion call -- the two legs dedupe independently, so this never raises IDEMPOTENCY_CONFLICT; a NEW key means a genuinely new stake.

signed_transaction / verify (two-phase execution): re-call this tool with the SIGNED base64 tx and Crank broadcasts it, then awaits on-chain confirmation and re-reads the LST + SOL balances -- the response carries a real verification block ({confirmed, slot, post_state, expected_vs_actual}). Gate follow-on decisions on verification.confirmed, never on tx_signature alone. verify=false skips only the confirmation wait.

Param Type Required Default
protocol string yes
amount integer yes
wallet_address string yes
allow_unverified boolean no false
signed_transaction string | null no
verify boolean no true
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

unstake_lst

Unstake an LST back to SOL (non-custodial).

lst_token is a mint (mSOL/jitoSOL/bSOL); amount in base units. mSOL routes via Marinade, others via the Sanctum router. Returns an UNSIGNED base64 tx. The technology service fee is charged on the unstaked-LST notional past the daily free tier (x402 payment_header).

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-unstaking. Reuse the SAME key across the build call and its signed_transaction completion call -- see liquid_stake; the two legs dedupe independently, so this never raises IDEMPOTENCY_CONFLICT.

signed_transaction / verify (two-phase execution): see liquid_stake -- re-call with the signed tx and Crank broadcasts it, confirms it on-chain, and re-reads the LST + SOL balances.

Param Type Required Default
lst_token string yes
amount integer yes
wallet_address string yes
signed_transaction string | null no
verify boolean no true
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

get_lst_yields

Compare APY across LST providers (Marinade/Jito/Blaze) with MEV-boost + validator-count descriptors.

Workflow: YIELDS step -- staking keeps SOL exposure + earns yield (vs lending, which removes price exposure). Best APY becomes the 'park it' leg of the allocation; execute via liquid_stake. See get_trading_workflow.

No parameters (besides caller_id).

Fee: free (read-only / control-plane). No x402 payment.

lst_swap

Swap between two LSTs via the Sanctum router (non-custodial).

from_lst/to_lst are mints; amount in base units. Returns an UNSIGNED base64 tx + output amount. The technology service fee is charged on the input-LST notional past the daily free tier (x402 payment_header). The acquired LST (to_lst) is authenticity-verified first; set allow_unverified=true to swap into an unverified LST at your own risk.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-swapping. Reuse the SAME key across the build call and its signed_transaction completion call -- see liquid_stake; the two legs dedupe independently, so this never raises IDEMPOTENCY_CONFLICT.

signed_transaction / verify (two-phase execution): see liquid_stake -- re-call with the signed tx and Crank broadcasts it, confirms it on-chain, and re-reads both LST balances.

Param Type Required Default
from_lst string yes
to_lst string yes
amount integer yes
wallet_address string yes
allow_unverified boolean no false
signed_transaction string | null no
verify boolean no true
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

Lending-based shorting & leverage

Synthetic shorts and leveraged longs built from lending loops.

short_open

Open a lending-based short: deposit collateral -> borrow token -> sell.

Returns an ORDERED STEP PLAN of UNSIGNED base64 txs to sign + broadcast in sequence, plus entry price + health factor + a short_id for tracking. All amounts in base units. The shorted token is authenticity-verified first; set allow_unverified=true to short an unverified mint at your own risk. Past the daily free tier an x402 payment_header is required.

jurisdiction: your ISO-3166-1 alpha-2 country code, self-declared -- synthetic shorting is geo-gated (no US persons, unknown jurisdiction DENIED). Declare once here (or via declare_jurisdiction/trade_equity/perps tools) and it is remembered 90 days.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-opening the short.

Param Type Required Default
token_to_short string yes
collateral_token string yes
collateral_amount integer yes
borrow_amount integer yes
wallet_address string yes
protocol string no "kamino"
market string | null no
marginfi_account string | null no
slippage_bps integer no 50
allow_unverified boolean no false
jurisdiction string | null no
ip string no ""
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

short_close

Close a tracked short: buy token -> repay loan -> withdraw collateral.

Returns an ORDERED STEP PLAN + exit price. short_id from short_open. Past the daily free tier an x402 payment_header is required.

jurisdiction: closes are geo-gated too -- see short_open.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-closing the short.

Param Type Required Default
short_id integer yes
wallet_address string yes
buy_with_amount integer | null no
market string | null no
marginfi_account string | null no
slippage_bps integer no 50
jurisdiction string | null no
ip string no ""
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

short_status

List open shorts for a wallet with entry price + health factor.

Param Type Required Default
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

leverage_long

Open a lending-based leveraged long by looping deposit -> borrow stable -> buy more -> redeposit.

Returns an ORDERED STEP PLAN of UNSIGNED base64 txs, effective leverage, loop count, health factor, and a position_id. amount in base units. The levered token is authenticity-verified first; set allow_unverified=true to lever an unverified mint at your own risk. Past the daily free tier an x402 payment_header is required.

jurisdiction: leverage is geo-gated too -- see short_open.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-opening the leveraged position.

Param Type Required Default
token string yes
amount integer yes
target_leverage number yes
wallet_address string yes
protocol string no "kamino"
stable_token string | null no
market string | null no
marginfi_account string | null no
slippage_bps integer no 50
allow_unverified boolean no false
jurisdiction string | null no
ip string no ""
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

leverage_close

Unwind a tracked leveraged position: sell -> repay stable -> withdraw.

Returns an ORDERED STEP PLAN. position_id from leverage_long. Past the daily free tier an x402 payment_header is required.

jurisdiction: closes are geo-gated too -- see short_open.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-unwinding the position.

Param Type Required Default
position_id integer yes
wallet_address string yes
market string | null no
marginfi_account string | null no
slippage_bps integer no 50
jurisdiction string | null no
ip string no ""
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

Tokenized equities

Status: Rolling out

Spot xStocks / Ondo. SECURITIES: geo-gated, OFAC-screened, per-execution confirmation, flat securities fee.

trade_equity

Spot-trade a tokenized equity (xStocks / Ondo) via Jupiter, non-custodial.

side: buy | sell. amount is in base units of the INPUT token (USDC 6dp for a buy, the equity token for a sell). These are tokenized SECURITIES: the call is geo-gated (Reg S = no US persons; declare jurisdiction once via the jurisdiction arg) and OFAC-screened, and requires per-execution confirmation -- WITHOUT confirm=true it returns a quote + disclaimer and does NOT execute (no autonomous equity execution). With confirm=true it returns an UNSIGNED base64 tx to sign + broadcast; pass signed_transaction to broadcast a caller-signed tx. Value-bearing: past the daily free tier an x402 payment_header is required. ip = caller origin IP for the Reg S geo gate (US IP -> refused even with an attestation; an agent's Railway Singapore egress resolves to SG and passes). venue_hint is ADVISORY, never required -- equity routes via the issuer registry (one surface today); an unknown hint raises.

idempotency_key (optional): see jupiter_swap -- same replay-on-retry semantics, same key reused across build + broadcast.

verify (extending default True): when broadcasting (signed_transaction supplied), await on-chain confirmation and re-read the equity mint balance -- the response gains a verification block ({confirmed, slot, post_state, expected_vs_actual}). Gate follow-on decisions on verification.confirmed, never on tx_signature alone. Set False to skip for latency-sensitive callers. Verify any prior signature later with the standalone verify_transaction tool.

Param Type Required Default
symbol string yes
side string yes
amount integer yes
wallet_address string yes
jurisdiction string | null no
confirm boolean no false
slippage_bps integer no 50
signed_transaction string | null no
allow_unverified boolean no false
ip string no ""
venue_hint string | null no
verify boolean no true
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: flat securities technology service fee (tokenized security; no growth mechanics). Value-bearing -- x402 required past the daily free tier.

equity_quote

Read-only Jupiter quote for a tokenized-equity trade (no execution).

amount is in base units of the INPUT token (USDC for buy, the equity for sell). Returns expected output, price impact, effective fee, slippage, and the SEC disclaimer. venue_hint is ADVISORY, never required -- see trade_equity.

Param Type Required Default
symbol string yes
amount integer yes
side string no "buy"
slippage_bps integer no 50
venue_hint string | null no

Fee: free (read-only / control-plane). No x402 payment.

equity_markets

List available tokenized equities with issuer, regime, price, market hours.

Read-only. Source: the admin-editable TokenRegistry. Each row carries issuer (xStocks/Ondo), regulatory_framework, geo_restrictions, and best-effort price/volume/market-cap, plus NYSE status + the 24/7-on-Solana flag.

No parameters (besides caller_id).

Fee: free (read-only / control-plane). No x402 payment.

equity_positions

Tokenized-equity holdings for a wallet with live prices + market hours.

Read-only. Filters balances to registered equity mints; each: symbol, quantity, current_price, current_value_usd, issuer, regulatory_framework (avg_cost / unrealized P&L null until cost-basis tracking lands).

Param Type Required Default
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

equity_corporate_events

Earnings / dividend / split calendar for a tokenized equity.

Read-only. The after-hours-agent feature: events an overnight strategy reacts to while the underlying trades 24/7 on Solana. Provider-backed; returns an honest empty payload + SEC EDGAR link when no feed is configured.

Param Type Required Default
symbol string yes

Fee: free (read-only / control-plane). No x402 payment.

equity_market_hours

NYSE session status + the 24/7-on-Solana availability flag.

Read-only. status: closed | pre_market | open | after_hours, with next open/close. Highlights the structural advantage: tokenized equities trade 24/7 on-chain regardless of NYSE hours.

Param Type Required Default
symbol string | null no

Fee: free (read-only / control-plane). No x402 payment.

Fiat on/off-ramp

Status: Rolling out

Card / bank / Apple Pay <-> USDC via MoonPay (non-custodial settlement).

fund_wallet

Fund a wallet with fiat via MoonPay (card/bank/Apple Pay -> USDC).

Returns a hosted checkout_url for the user to complete payment + a session_id to poll with get_onramp_status. Purchased USDC settles directly to wallet_address (non-custodial). payment_method: card | bank | apple_pay. The fee is charged on amount_usd notional past the daily free tier (x402 payment_header).

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result (same checkout_url/session_id) instead of creating a second MoonPay session.

Param Type Required Default
wallet_address string yes
amount_usd number yes
payment_method string no "card"
currency string no "USDC"
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

offramp_to_fiat

Cash out crypto to fiat via MoonPay (non-custodial).

token is the crypto to sell; amount is its quantity; destination is a MoonPay bank_account_id the fiat is paid to. Returns offramp_id, estimated_fiat, and status. Past the daily free tier an x402 payment_header is required.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result (same offramp_id) instead of creating a second MoonPay sell order.

Param Type Required Default
wallet_address string yes
token string yes
amount number yes
destination string yes
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

get_onramp_status

Check a pending MoonPay purchase by session_id.

Returns status (pending/processing/completed/failed), amount_crypto, and the on-chain tx_signature once settled.

Param Type Required Default
session_id string yes

Fee: free (read-only / control-plane). No x402 payment.

Strategies

Typed canned-strategy create / status / lifecycle. Backtest first.

strategy_dca_create

Create a dollar-cost-average strategy buying usd_per_buy of target each interval.

risk (optional) overrides the safe-default risk limits: max_position_pct / max_portfolio_exposure_pct / max_single_loss_pct / max_drawdown_pct / max_daily_loss_pct (percent; <=0 disables a guard).

Direction (optional, all deterministic signals -- DYOR): direction_mode (auto | long_only | short_only | manual; default auto = follow the market regime, reducing exposure in a bear instead of accumulating), allow_short (enable real shorts via the configured perps venue), regime_override (force bull | bear | range | volatile instead of trusting detection).

Workflow: EXECUTE step -- stand up a recurring strategy after backtest_strategy validates it and get_risk_assessment sets the guards; track via strategy_status. An agent wallet without a Turnkey signer = paper-trade (unsigned tx per tick). See get_trading_workflow.

Param Type Required Default
wallet_address string yes
target_token string yes
usd_per_buy number yes
interval_seconds integer no 86400
source_token string no "USDC"
slippage_bps integer no 50
smart boolean no false
risk object | null no
direction_mode string | null no
allow_short boolean | null no
regime_override string | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_rebalance_create

Create a portfolio-rebalance strategy toward target_allocation (mint->weight).

Direction (optional, deterministic signal): direction_mode / allow_short / regime_override -- see strategy_dca_create.

Param Type Required Default
wallet_address string yes
target_allocation object yes
drift_threshold_pct number no 5.0
interval_seconds integer no 3600
slippage_bps integer no 50
risk object | null no
direction_mode string | null no
allow_short boolean | null no
regime_override string | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_stoploss_create

Create a stop-loss / take-profit / trailing-stop monitor on a held position.

position_amount is base units of target_token to liquidate on trigger. At least one of stop_loss_pct / take_profit_pct / a trailing config should be set (fractions, e.g. 0.15 == 15%).

Direction (optional, deterministic signal): direction_mode / allow_short / regime_override -- see strategy_dca_create.

Param Type Required Default
wallet_address string yes
target_token string yes
position_amount integer yes
stop_loss_pct number | null no
take_profit_pct number | null no
trailing boolean no false
trailing_distance_pct number | null no
entry_price number | null no
source_token string no "USDC"
interval_seconds integer no 60
slippage_bps integer no 50
risk object | null no
direction_mode string | null no
allow_short boolean | null no
regime_override string | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_equity_dca_create

Status: Rolling out

Create an equity dollar-cost-average strategy (tokenized equities / xStocks).

Shares the DCA executor -- identical mechanics/config to strategy_dca_create -- tagged equity_dca because target_token is expected to be a tokenized-equity mint. SEC posture: DCA is a MECHANICAL, user-configured strategy (not discretionary), so it stays autonomous even on a security target -- the per-execution confirmation gate only applies to the discretionary types (momentum / sentiment). Equity classification still drives geo-gating + disclaimers at execution; call asset_classification / get_disclaimers first.

risk / direction params: see strategy_dca_create.

Param Type Required Default
wallet_address string yes
target_token string yes
usd_per_buy number yes
interval_seconds integer no 86400
source_token string no "USDC"
slippage_bps integer no 50
smart boolean no false
risk object | null no
direction_mode string | null no
allow_short boolean | null no
regime_override string | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_protect_create

Create a downside-protection monitor on a held position.

Shares the stop-loss executor -- identical config/mechanics to strategy_stoploss_create -- framed as a pure downside guard. At least one of stop_loss_pct / take_profit_pct / trailing must be set.

Param Type Required Default
wallet_address string yes
target_token string yes
position_amount integer yes
stop_loss_pct number | null no
take_profit_pct number | null no
trailing boolean no false
trailing_distance_pct number | null no
entry_price number | null no
source_token string no "USDC"
interval_seconds integer no 60
slippage_bps integer no 50
risk object | null no
direction_mode string | null no
allow_short boolean | null no
regime_override string | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_hedge_create

Create a hedge strategy -- an exit trigger that unwinds a held position.

Shares the stop-loss executor -- identical config/mechanics to strategy_stoploss_create -- framed as an active risk-offset trigger: set stop_loss_pct / trailing to shed exposure on an adverse move, or take_profit_pct to lock in a favourable one. At least one of stop_loss_pct / take_profit_pct / trailing must be set.

Param Type Required Default
wallet_address string yes
target_token string yes
position_amount integer yes
stop_loss_pct number | null no
take_profit_pct number | null no
trailing boolean no false
trailing_distance_pct number | null no
entry_price number | null no
source_token string no "USDC"
interval_seconds integer no 60
slippage_bps integer no 50
risk object | null no
direction_mode string | null no
allow_short boolean | null no
regime_override string | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_vault_create

Create a vault strategy -- a target-allocation basket held via rebalancing.

Shares the rebalance executor -- identical config/mechanics to strategy_rebalance_create (target_allocation mint->weight, drift_threshold_pct) -- framed as a passive basket rather than an active rebalance loop. No external vault/LP deposit (hard rule 1): the non-custodial swap pipeline only rotates spot holdings toward the target weights.

Direction (optional, deterministic signal): direction_mode / allow_short / regime_override -- see strategy_dca_create.

Param Type Required Default
wallet_address string yes
target_allocation object yes
drift_threshold_pct number no 5.0
interval_seconds integer no 3600
slippage_bps integer no 50
risk object | null no
direction_mode string | null no
allow_short boolean | null no
regime_override string | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_snipe_create

Create a snipe/scalping strategy -- dip-buy with a fast take-profit/stop exit.

Flat: buys usd_per_buy when price is entry_dip_pct below the close lookback ticks ago. Holding: exits on a tight take_profit_pct OR stop_loss_pct -- many small round-trips. Runs on a short interval (default 60s) since it reads a per-tick rolling price window that must accumulate lookback + 1 observations before it can enter.

risk / direction params: see strategy_dca_create.

Param Type Required Default
wallet_address string yes
target_token string yes
usd_per_buy number yes
interval_seconds integer no 60
source_token string no "USDC"
lookback integer no 3
entry_dip_pct number no 0.005
take_profit_pct number no 0.01
stop_loss_pct number no 0.005
slippage_bps integer no 50
risk object | null no
direction_mode string | null no
allow_short boolean | null no
regime_override string | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_momentum_create

Create a momentum strategy -- fast/slow SMA crossover entry/exit.

Buys on a bullish cross (fast SMA > slow SMA), sells on a bearish cross. DISCRETIONARY (SEC framework): the model interprets a signal and converts it to a trade, so targeting a tokenized SECURITY forces per-execution user confirmation before the scheduled dispatcher will run a tick (strategies.tasks.execute_strategy requires user_confirmed=True; crypto targets stay fully autonomous). Call asset_classification first.

risk / direction params: see strategy_dca_create.

Param Type Required Default
wallet_address string yes
target_token string yes
usd_per_buy number yes
interval_seconds integer no 3600
source_token string no "USDC"
fast integer no 5
slow integer no 20
slippage_bps integer no 50
risk object | null no
direction_mode string | null no
allow_short boolean | null no
regime_override string | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_sentiment_create

Create a sentiment strategy -- trades an aggregate sentiment score.

Buys when the score is >= bull_threshold (flat), sells when it is <= bear_threshold (holding); the neutral band holds. The score is sourced live from market intelligence each tick, or pinned via sentiment_score. DISCRETIONARY (SEC framework): targeting a tokenized SECURITY forces per-execution user_confirmed at execution (crypto stays fully autonomous). Call asset_classification first.

risk / direction params: see strategy_dca_create.

Param Type Required Default
wallet_address string yes
target_token string yes
usd_per_buy number yes
interval_seconds integer no 3600
source_token string no "USDC"
bull_threshold number no 0.15
bear_threshold number no -0.15
sentiment_score number | null no
slippage_bps integer no 50
risk object | null no
direction_mode string | null no
allow_short boolean | null no
regime_override string | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_yield_farm_create

Create a yield-farm strategy -- maintains a target basket allocation.

Shares the rebalance executor (config identical to strategy_rebalance_create): depositing into an external yield protocol / LP position has no faithful swap-pipeline analogue, so this models a yield farm as keeping a target allocation across the basket via converging rebalance swaps (hard rule 1: the non-custodial pipeline only rotates spot holdings, never deposits externally).

Direction (optional, deterministic signal): direction_mode / allow_short / regime_override -- see strategy_dca_create.

Param Type Required Default
wallet_address string yes
target_allocation object yes
drift_threshold_pct number no 5.0
interval_seconds integer no 3600
slippage_bps integer no 50
risk object | null no
direction_mode string | null no
allow_short boolean | null no
regime_override string | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_copy_wallet_create

Create a copy-wallet strategy -- mirrors a tracked wallet's entries/exits.

tracked_wallet is the Solana address to mirror (its confirmed on-chain buy/sell actions are sourced each tick); usd_per_buy is the default mirror size (scaled by size_multiplier) applied when the tracked wallet buys. APPROXIMATE: no full per-fill replication (every execution is flagged approximate).

risk / direction params: see strategy_dca_create.

Param Type Required Default
wallet_address string yes
target_token string yes
usd_per_buy number yes
tracked_wallet string | null no
interval_seconds integer no 60
source_token string no "USDC"
size_multiplier number no 1.0
slippage_bps integer no 50
risk object | null no
direction_mode string | null no
allow_short boolean | null no
regime_override string | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_market_make_create

Create a market-make strategy -- two-sided spread capture (APPROXIMATE).

No live order book -- SYNTHESISES a spread from realised volatility around a rolling mid: a "filled bid" (price a half-spread below mid) buys, a "filled ask" (above mid) sells (up to held inventory). Market-neutral: PAUSES in a trending (bull/bear) regime instead of adapting direction (a maker gets run over by a directional move) -- read directly inside the executor, so no direction params are exposed here.

risk: see strategy_dca_create.

Param Type Required Default
wallet_address string yes
target_token string yes
usd_per_quote number yes
interval_seconds integer no 60
source_token string no "USDC"
mid_period integer no 20
spread_lookback integer no 20
base_spread_pct number no 0.002
vol_spread_mult number no 1.0
max_levels integer no 5
slippage_bps integer no 50
risk object | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_arb_create

Create an arb strategy -- cross-venue price-discrepancy convergence (APPROXIMATE).

Reads a live cross-venue spread each tick (task-sourced from the Jupiter quote corpus vs on-chain price) or falls back to a transparent PROXY (deviation below a short EMA) when unavailable. Enters when the spread clears entry_spread_pct and flat; exits when it reverts to exit_spread_pct. The simultaneous two-venue fill is collapsed to one leg (flagged approximate). Market-neutral: no direction params exposed (regime is read directly, not adapted).

risk: see strategy_dca_create.

Param Type Required Default
wallet_address string yes
target_token string yes
usd_per_trade number yes
interval_seconds integer no 60
source_token string no "USDC"
ema_period integer no 12
entry_spread_pct number no 0.004
exit_spread_pct number no 0.0
slippage_bps integer no 50
risk object | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_perp_grid_create

Create a perp-grid strategy -- a ladder of perp LONGS accumulated on dips.

Routes through the multi-venue perps VENUE ADAPTER (hard rule 2; Jupiter Perps primary). Around a rolling center price (SMA, or an explicit center_price), each grid_spacing_pct move below center is one rung; crossing a deeper rung opens a perp long sized usd_per_level at leverage. PAUSES new rungs in a trending (bull/bear) regime and closes the ladder in a bear (stop the bleed); tightens spacing in range, widens when volatile. Only an asset with a mapped perp market (currently SOL) can open -- see get_venue_status for routable markets. venue optional (defaults to the configured primary); a Tier B (custodied) venue needs acknowledge_tier_b=true after reviewing its custody_disclosure.

risk: see strategy_dca_create.

Param Type Required Default
wallet_address string yes
target_token string yes
usd_per_level number yes
interval_seconds integer no 300
center_price number | null no
center_period integer no 20
grid_spacing_pct number no 0.02
grid_levels integer no 5
leverage number no 1.0
range_tighten number no 0.5
volatile_widen number no 2.0
venue string | null no
acknowledge_tier_b boolean no false
slippage_bps integer no 50
risk object | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_basis_trade_create

Create a basis-trade strategy -- funding-harvest perp SHORT leg (APPROXIMATE).

Routes the perp leg through the multi-venue VENUE ADAPTER (hard rule 2). A live delta-neutral basis trade is long spot + short perp harvesting funding; this executor opens/manages only the perp SHORT leg (the spot long that makes the book delta-neutral is held separately by the caller) -- flagged approximate + funding_not_modeled (funding PnL itself is not simulated live). While funding is favourable (> min_funding) and flat, opens the short sized usd_per_trade at leverage; closes when funding decays to <= min_funding. Only an asset with a mapped perp market (currently SOL) can open. A Tier B (custodied) venue needs acknowledge_tier_b=true.

risk: see strategy_dca_create.

Param Type Required Default
wallet_address string yes
target_token string yes
usd_per_trade number yes
interval_seconds integer no 300
funding_lookback integer no 24
min_funding number no 0.0
leverage number no 1.0
venue string | null no
acknowledge_tier_b boolean no false
slippage_bps integer no 50
risk object | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_list

List a wallet's strategies (newest first, capped).

detail: "concise" (default) trims each row to strategy_id/strategy_type/status -- the IDs needed to chain into strategy_status/strategy_modify/strategy_cancel/strategy_pause/ strategy_resume; "full" also includes schedule/next_execution_at, as before. An unrecognised value falls back to concise (never errors).

Param Type Required Default
wallet_address string yes
detail string no "concise"

Fee: free (read-only / control-plane). No x402 payment.

strategy_status

Status + last execution of one strategy (scoped to the caller's wallet).

Param Type Required Default
strategy_id integer yes
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

strategy_modify

Edit a running strategy's parameters IN PLACE -- no cancel + recreate.

React to a fresh signal by retuning the strategy you already own: the execution history, cost-basis ledger and position state all survive, and there is no window where the strategy is gone. The live executor picks the new config up on its NEXT tick; a tick already in flight finishes against the config it loaded (it writes only runtime state, never config, so the two can never clobber each other).

Scoped to the caller's own wallet (hard rule 1 -- non-custodial: this edits a row the owner already controls; nothing here holds keys, signs or moves funds).

Args (all optional -- supply at least one): config_updates: strategy-config keys to set, merged over the existing config (e.g. {"usd_per_buy": 25, "stop_loss_pct": 0.08}). remove_keys: config keys to drop back to the executor's default. risk: retune the risk limits -- max_position_pct / max_portfolio_exposure_pct / max_single_loss_pct / max_drawdown_pct / max_daily_loss_pct (percent; <=0 disables a single guard). direction_mode / allow_short / regime_override: the direction controls from the create tools (deterministic signals -- DYOR). target_allocation: new mint->weight basket (rebalance / vault / yield_farm). interval_seconds: new tick interval, used from the next tick on. reason: free text recorded on the strategy's audit log.

REFUSED (returns immutable_config_key): target_token / source_token / tracked_wallet / venue / composite definition. These define WHAT the strategy trades -- editing them in place would desync the executor's position bookkeeping or strand an open perp leg on the venue it was opened against. Cancel and create a new strategy for those. A STOPPED strategy is final and cannot be modified; a paused one can (the edit does not resume it -- use strategy_resume).

The merged config is dry-run through the strategy's executor before it is persisted, so an invalid edit is rejected (invalid_config) rather than latching the live strategy into error on its next tick.

Param Type Required Default
strategy_id integer yes
wallet_address string yes
config_updates object | null no
remove_keys array<string> | null no
risk object | null no
direction_mode string | null no
allow_short boolean | null no
regime_override string | null no
target_allocation object | null no
interval_seconds integer | null no
reason string no ""

Fee: free (read-only / control-plane). No x402 payment.

strategy_pause

Manually pause a strategy (status=paused_manual; stops dispatch).

Param Type Required Default
strategy_id integer yes
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

strategy_resume

Re-enable a paused strategy (manual re-enable after a drawdown pause).

The drawdown kill switch latches a strategy to paused_drawdown and requires this explicit owner action to resume; the equity high-water mark is reset so it does not immediately re-trip.

(spec s7.1): resuming a PERPS-CAPABLE strategy (perp_grid / basis_trade / allow_short / short_only) re-runs the perps jurisdiction gate first -- a wallet whose jurisdiction no longer passes (US / unknown / expired / OFAC / AU) cannot re-engage a paused perps strategy.

Param Type Required Default
strategy_id integer yes
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

strategy_cancel

Stop a strategy (sets status=stopped; it will not be dispatched again).

Param Type Required Default
strategy_id integer yes
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

Backtesting, ML & regime

Read-only simulation and deterministic, non-personalised signals before deploying capital.

backtest_strategy

Backtest a strategy on historical Solana OHLCV before deploying capital.

strategy_type is one of the 17 Crank strategy types (dca, momentum, rebalance, stoploss, protect, snipe, sentiment, vault, yield_farm, hedge, equity_dca, perp_grid, copy_wallet, market_make, arb, basis_trade, composite). asset is a token mint; timeframe one of 1m/5m/15m/1h/4h/1d; start_date/end_date are ISO-8601. params tunes the strategy (e.g. {"fast":5,"slow":20} for momentum). For strategy_type="composite" pass the signal-rule definition (see compose_strategy); the response includes a per-stream signal_coverage honesty report -- streams with partial persisted history are flagged, never silently zero-filled. slippage_model: "fixed" (slippage_bps haircut) or "jupiter_replay" (realised price-impact from the recorded quote corpus). Returns performance metrics (Sharpe/Sortino/Calmar, max drawdown, win rate, profit factor, VaR/CVaR), final equity, and trade + signal counts. Read-only simulation -- no fee, no on-chain action.

Workflow: SIMULATE step -- validate a strategy on history before risking capital; run twice (e.g. auto vs long_only) to compare. Poor Sharpe/deep drawdown -> retune or fall back to the yield leg. Feeds get_risk_assessment -> the strategy_*_create tools. See get_trading_workflow.

Param Type Required Default
strategy_type string yes
asset string yes
timeframe string yes
start_date string yes
end_date string yes
params object | null no
initial_capital number no 10000.0
fee_bps integer no 75
slippage_model string no "fixed"
slippage_bps integer no 30
wallet_address string no ""
definition object | null no

Fee: free (read-only / control-plane). No x402 payment.

get_ml_signal

ML ensemble directional forecast for a Solana asset (read-only).

Trains the ported Bybit ensemble (XGBoost + RandomForest + NeuralNet + GradientBoost + a candle flow proxy) walk-forward on the last lookback_candles of OHLCV, then returns the blended P(up move) for the latest candle: score in [0,1], confidence (distance from 0.5), direction (long/short/neutral via buy_threshold/sell_threshold), per-model contributions and top feature importances. asset is a token mint; timeframe one of 1m/5m/15m/1h/4h/1d; horizon is the forward-return label horizon in candles. On spot, 'short' = exit-to-flat (no native short). Heuristic forecast from price history only -- not financial advice. No wallet, no fee, no on-chain action.

Workflow: INTELLIGENCE step -- a directional forecast that complements detect_regime; low confidence -> cut size or stay flat. See get_trading_workflow.

Param Type Required Default
asset string yes
timeframe string no "1h"
lookback_candles integer no 400
horizon integer no 4
buy_threshold number no 0.55
sell_threshold number no 0.45

Fee: free (read-only / control-plane). No x402 payment.

detect_regime

Detect the current market regime for a Solana asset (read-only, deterministic).

Classifies the latest candle of recent OHLCV as bull / bear / range / volatile and returns a RegimeSignal: regime, confidence, trend_strength, volatility_percentile, a SUGGESTED direction (long/short/neutral) and position-size fraction (0-1), plus the raw ADX / +DI / -DI / SMA-slope / volume readings for transparency. asset is a token mint; timeframe one of 1m/5m/15m/1h/4h/1d. A description + suggestion only -- not financial advice, not a trade instruction (DYOR). No wallet, no fee, no on-chain action.

Workflow: INTELLIGENCE step -- pair with get_market_briefing (macro) + get_ml_signal (forecast); feeds strategy choice + direction_mode at backtest + create time. bear + allow_short -> consider a short. See get_trading_workflow.

Param Type Required Default
asset string yes
timeframe string no "1h"
lookback_candles integer no 400

Fee: free (read-only / control-plane). No x402 payment.

get_risk_assessment

Combined regime + risk-guard calculation for a strategy on an asset (read-only).

Folds the detected market regime together with the safe-default risk guards (position / exposure / single-loss / drawdown / daily-loss limits) into one deterministic output: a rules-based direction, a conviction-weighted position size already capped to the position guard (in both percent-of-equity and USD notional against equity), a per-regime action note, and the full guard set. strategy_type is one of the 16 Crank strategy types; asset is a token mint; timeframe one of 1m/5m/15m/1h/4h/1d. A mechanical, non-personalised calculation you choose whether to act on (DYOR) -- not financial advice, not a recommendation, and not a managed account. No wallet, no fee.

Workflow: RISK step -- after backtest_strategy, before execution. The returned suggested_size_usd caps the order in the execute phase; do NOT exceed it. Check asset_classification first (equity -> per-execution confirm). See get_trading_workflow.

Param Type Required Default
strategy_type string yes
asset string yes
timeframe string no "1h"
equity number no 10000.0
lookback_candles integer no 400

Fee: free (read-only / control-plane). No x402 payment.

Intelligence (news / consensus)

Market briefings and consensus reads. Some tiers are premium (x402 / $CRANK-staker subscription).

get_market_briefing

Crypto market briefing synthesised from free public sources (tiered).

Returns a market briefing aggregated from free crypto data sources (Coin Bureau, DeFiLlama, the alternative.me Fear & Greed index) plus classified sentiment signals: market summary, top movers / most-discussed assets, sentiment regime, the Fear & Greed reading, and source attribution. assets is an optional list of tickers (e.g. ["BTC","SOL"]); for paid tiers it declares the agent's holdings and focuses the synthesis. detail_level: "free" returns the pre-generated daily Free briefing (metered at $0, quota'd per day); "pro" ($0.25) and "platinum" ($0.50) return real-time synthesis by a larger model, personalised to the wallet's portfolio + active strategies. Paid tiers are covered by an active $CRANK-staker subscription or require a verified x402 payment_header (PAYMENT_REQUIRED otherwise). The billing outcome is in the response billing field. Not financial advice.

detail (payload shape -- NOT the pricing tier, that's detail_level above): "concise" (default) drops the long content body + model_used/source_count, keeping the summary, sentiment regime, Fear & Greed reading, covered assets, and strategy_connections (IDs for chaining into a strategy tool) plus the billing outcome; "full" returns every field exactly as before, including content.

Workflow: INTELLIGENCE step (usually first) -- macro/sentiment context that frames detect_regime + the allocation. See get_trading_workflow.

Param Type Required Default
assets array<string> | null no
detail_level string no "free"
timeframe string no "24h"
wallet_address string no ""
payment_header string no ""
detail string no "concise"

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required.

get_source_accuracy

Historical directional hit-rate of each intelligence source (free read).

Returns per-source accuracy stats for the intelligence signal sources (Coin Bureau / YouTube, RSS, Fear & Greed API, on-chain), so an agent can weight a source's calls by how often its bullish/bearish reads have played out. Each source carries a windows map over rolling 7d/30d/90d periods, each with total resolved calls, correct/incorrect counts, and accuracy_pct; sources with no resolved calls yet are omitted, and results are ranked by longest-window accuracy. windows optionally narrows the periods (subset of [7,30,90]); source_type optionally filters by source kind (youtube, rss, api, on_chain). Accuracy = the directional call vs the realised Birdeye price over the prediction window. Past accuracy is not a guarantee. Not financial advice.

Workflow: INTELLIGENCE step -- pair with get_market_briefing to discount or trust a signal by its source's track record before sizing a position.

Param Type Required Default
windows array<integer> | null no
source_type string no ""

Fee: free (read-only / control-plane). No x402 payment.

get_regulatory_updates

Recent regulatory statements affecting Crank's scope (free read).

Returns SEC / CFTC / FinCEN press releases and rule proposals from a scheduled daily scan, LLM-classified for relevance to Crank: DeFi, crypto perps, tokenized equities, autonomous agent trading, and non-custodial custody. Each update carries the issuing agency, title, url, relevance (high/medium/low) + score, matched topics, and a one-line factual summary; results are ranked by relevance then recency. window_hours bounds the lookback (default 168 = 7 days, capped at 720 = 30 days); min_relevance filters by floor (high/medium/low); agency optionally narrows to one body (SEC, CFTC, FinCEN). Relevance is a compliance-triage signal, not legal advice. Not financial advice.

Workflow: INTELLIGENCE / COMPLIANCE step -- check the current regulatory posture around perps, tokenized equities, or agent trading before acting on a strategy.

Param Type Required Default
window_hours integer no 168
min_relevance string no "low"
agency string no ""

Fee: free (read-only / control-plane). No x402 payment.

get_technology_updates

Recent technology / tooling developments relevant to Crank + Engaij (free read).

Returns items from a scheduled scan of technology feeds (Anthropic, OpenAI, Coinbase Developer, Solana Foundation, Hacker News filtered, GitHub trending) plus flagged YouTube tech channels (full transcript ingested), LLM-classified for relevance to both Crank (Solana trading infra + DeFi frontend) and Engaij (the parent automation platform). Each update carries category (sdk_release / api_change / competitor / regulatory / research / tooling), relevance_to_crank and relevance_to_engaij (high/medium/low/none), a concrete application_recommendation (what to do about it), title, url, and a one-line summary; results are ranked by relevance then recency. window_hours bounds the lookback (default 168 = 7 days, capped at 720 = 30 days); min_relevance filters by floor (high/medium/low); category optionally narrows to one kind. A triage signal, not advice. Not financial advice.

Workflow: INTELLIGENCE step -- scan for SDK / API releases, competitor moves, or tooling worth adopting before planning integration or strategy work.

Param Type Required Default
window_hours integer no 168
min_relevance string no "medium"
category string no ""

Fee: free (read-only / control-plane). No x402 payment.

get_consensus

Multi-source consensus + contrarian read for one asset (PLATINUM premium).

Cross-references the classified intelligence signals for asset over the last window_hours (default 24): how many independent sources agree on direction (consensus_score 0-1), the source breakdown (bullish/bearish/neutral), and the accuracy-weighted directional score (-1..+1) that blends each source's call by its historical hit-rate (get_source_accuracy). High agreement (>80%) is flagged as a crowded, potentially contrarian condition; low agreement (<30%) as uncertain. This is a PLATINUM-tier feature: covered by a Platinum $CRANK-staker subscription, or pay the per-call x402 fee with payment_header (PAYMENT_REQUIRED otherwise); the billing outcome is in the response billing field. Descriptive signal only, not a recommendation. Not financial advice.

Workflow: INTELLIGENCE step -- pair with get_market_briefing + get_source_accuracy to gauge how crowded a directional read is before sizing.

Param Type Required Default
asset string yes
window_hours integer no 24
wallet_address string no ""
payment_header string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required.

get_contrarian_signals

Contrarian (crowded) + uncertain assets across the window (PLATINUM premium).

Scans the classified intelligence signals over the last window_hours and returns assets where source agreement is very high -- a one-sided, crowded positioning flagged as a potential contrarian condition (with the side a contrarian would take) -- and assets where agreement is very low (uncertain). With asset set, returns just that asset's assessment. PLATINUM-tier: covered by a Platinum $CRANK-staker subscription or a verified x402 payment_header (PAYMENT_REQUIRED otherwise); the billing outcome is in billing. Descriptive signal only, not a recommendation. Not financial advice.

Workflow: INTELLIGENCE step -- surface crowded trades to fade or uncertain assets to avoid before committing to a regime/allocation.

Param Type Required Default
asset string no ""
window_hours integer no 24
wallet_address string no ""
payment_header string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required.

Venue health & risk

Live venue safety reads before routing capital.

get_venue_health

Live safety/health read for one trading venue (read-only, non-custodial).

Returns operational status (live/degraded/suspended), last monitoring heartbeat, on-chain program deploy slot, SDK compatibility headline, TVL + perps 24h volume (DeFiLlama, cached 5 min). venue is a slug e.g. "drift", "jupiter", "pacifica". Use BEFORE routing capital to a venue.

Workflow: RISK step (venue-safety gate) -- run before any perps/lending leg; degraded/down reroutes or blocks the order. See get_trading_workflow.

Param Type Required Default
venue string yes

Fee: free (read-only / control-plane). No x402 payment.

get_venue_risk_score

Composite venue risk score 0-100 (higher = safer), with breakdown.

Read-only. Folds custody tier (A self-custodial / B venue-custodied), multisig threshold, timelock, audit status, exploit history, TVL trend and program age into a transparent weighted score (score_breakdown returned so the number is auditable). Factual assessment, not financial advice.

Param Type Required Default
venue string yes

Fee: free (read-only / control-plane). No x402 payment.

get_all_venues_status

Dashboard overview of all configured venues for routing decisions.

Read-only. One health record per active venue (status, deploy slot, TVL, 24h volume, composite safety score) so an agent can pick a venue in a single call. detail="concise" (default) trims each record to venue/ display_name/status/composite_score (venue is the ID to chain into get_venue_health); "full" adds deploy slot, TVL, 24h volume, uptime.

Param Type Required Default
detail string no "concise"

Fee: free (read-only / control-plane). No x402 payment.

venue_risk_comparison

Side-by-side risk comparison of two venues for a routing decision.

Read-only. Returns each venue's full risk record, the safer venue, and the composite-score delta. e.g. compare "jupiter" vs "pacifica" before routing.

Param Type Required Default
venue_a string yes
venue_b string yes

Fee: free (read-only / control-plane). No x402 payment.

Agent discovery & marketplace

A2A registry, strategy publishing / cloning, leaderboard. Free control-plane reads.

register_agent

Register/refresh an agent's discovery profile in the Crank registry.

capabilities is a subset of swap|perps|lending|staking|strategies|signals| equity|onramp; supported_protocols e.g. ["mcp","a2a","x402"]. Idempotent on wallet_address (a PUBLIC key -- non-custodial). This is how other agents find you via the A2A Agent Card + Solana Agent Registry.

Param Type Required Default
wallet_address string yes
capabilities array<string> | null no
display_name string no ""
description string no ""
a2a_card_url string no ""
mcp_endpoint string no ""
supported_protocols array<string> | null no
contact string no ""
version string no "1.0.0"

Fee: free (read-only / control-plane). No x402 payment.

discover_agents

Find registered agents, optionally filtered to one capability.

capability one of swap|perps|lending|staking|strategies|signals|equity|onramp (empty = all). Ranked by reputation then recency. Read-only, free.

Param Type Required Default
capability string no ""
limit integer no 50

Fee: free (read-only / control-plane). No x402 payment.

get_agent_profile

Read an agent's published profile + its referral stats (read-only, free).

Param Type Required Default
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

update_agent_profile

Patch an agent profile's metadata (display_name, capabilities, endpoints).

metadata is a dict of writable fields; capabilities are validated if present.

Param Type Required Default
wallet_address string yes
metadata object yes

Fee: free (read-only / control-plane). No x402 payment.

publish_strategy

Publish a cloneable strategy config to the marketplace (the flywheel).

config_template is the parameter set others clone. anonymous=true omits the author. performance_summary is a factual metrics blob -- no return promises are stored or surfaced (hard rule 8). backtest_run_id attaches a verified backtest (on-chain attestation hash + leaderboard ranking). Equity (tokenized-security) strategies are excluded. Read/control-plane, free.

Param Type Required Default
strategy_type string yes
name string yes
config_template object yes
description string no ""
performance_summary object | null no
author_wallet_address string no ""
anonymous boolean no false
backtest_run_id integer | null no

Fee: free (read-only / control-plane). No x402 payment.

discover_strategies

Browse published strategies (read-only, free). Crypto-only.

strategy_type filters to one of the 16 Crank strategy types (empty = all). sort ranks by clones|sharpe|return|sortino|win_rate|drawdown (default clones). detail="concise" (default) trims each entry to template_id/strategy_type/ name/clone_count/is_verified/backtest_hash (template_id is the ID to chain into clone_strategy); "full" adds description/config_template/ performance_summary/eligibility/author_wallet/created_at.

Param Type Required Default
strategy_type string no ""
limit integer no 50
sort string no "clones"
detail string no "concise"

Fee: free (read-only / control-plane). No x402 payment.

get_leaderboard

Top published strategies ranked by a verified backtest metric (free).

Crypto-only -- equity templates excluded. sort in sharpe|return| sortino|win_rate|drawdown|clones (default sharpe). Each entry carries factual backtest metrics + the on-chain attestation hash; no return promises (rule 8). detail="concise" (default) trims each entry the same way as discover_strategies (template_id is the ID to chain into clone_strategy); "full" returns every field.

Param Type Required Default
strategy_type string no ""
sort string no "sharpe"
limit integer no 50
detail string no "concise"

Fee: free (read-only / control-plane). No x402 payment.

clone_strategy

Clone a published strategy config to a wallet (records attribution).

Returns the config_template to deploy via the strategy create tools. The clone is attributed to the template author for the clone-creator fee share (15% of the tech fee on clone actions). Free to clone.

Param Type Required Default
template_id integer yes
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

Agent wallet management

Provision and govern managed agent wallets (non-custodial control plane).

create_agent_wallet

Register an agent wallet the caller controls (non-custodial control plane).

Creates an AgentWallet record keyed by agent_id and applies a policy preset. policy_preset: conservative | balanced | aggressive; omitted = balanced. This is a changeable default, not a cap: edit limits later with set_wallet_policy. unlimited=True starts the wallet with NO policies and records that explicit choice in the decision journal; passing both a preset and unlimited=True is rejected. default_policies is the legacy alias of policy_preset. wallet_address is the agent's PUBLIC key (caller-supplied); omit it to provision managed signing. Returns wallet_address, agent_id, status, applied_policies and policy_summary (applied limits + how to change them).

Param Type Required Default
agent_id string yes
display_name string no ""
default_policies string no ""
wallet_address string no ""
owner_address string no ""
policy_preset string no ""
unlimited boolean no false

Fee: free (read-only / control-plane). No x402 payment.

set_wallet_policy

Configure the caller's own trading limits and rules on an agent wallet.

policies: a list of {policy_type, value, enabled?} objects. policy_type is one of max_trade_size {"usd"} | daily_limit {"usd"} | approved_tokens {"tokens"} | banned_tokens {"tokens"} | position_limit {"usd"} | kill_switch {"active"} | drawdown_limit {"max_pct"} | max_daily_loss {"usd"} | trade_velocity {"max_per_hour", "max_per_day"} | venue_allowlist {"venues"}. Upserts by policy_type; returns the full updated policy set. perp_leverage_limit {"max_leverage": "5"} (caps the leverage a perp open may request, >= 1; above it is rejected, never clamped -- "no perps" is disabled_actions ["perp_open"]). On a Lane 2 wallet, a change that would LOOSEN a server-enforced default raises BROWSER_CONFIRMATION_REQUIRED -- call request_wallet_policy_loosening instead.

Permission mode: a configuration write -- allowed in every permission_mode, observe included; the ladder gates value-bearing actions, not config.

Param Type Required Default
wallet_address string yes
policies array<object> yes

Fee: free (read-only / control-plane). No x402 payment.

kill_wallet

Emergency freeze an agent wallet.

Sets status=killed so the policy gate refuses every subsequent value-bearing action. Returns confirmation + a frozen-positions count. (Turnkey scoped-key revocation is handled by the deferred provisioning ticket.)

Param Type Required Default
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

wallet_status

Current state, policy summary, recent activity, total volume, and tier.

Param Type Required Default
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

get_trading_limits

Read the per-token trading caps (TradingLimit rows) on an agent wallet.

Returns {wallet_address, trading_limits: [{token_address, max_position_size, max_single_trade, daily_volume_limit}], enforcement}. Caps are USD decimal strings; null = uncapped. enforcement states which execution rails actually read each column today -- a stored cap is not necessarily a binding one. Sibling of wallet_status for the WalletPolicy surface.

Param Type Required Default
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

set_trading_limits

Configure per-token trading caps (TradingLimit) on the caller's agent wallet.

limits: a list of {token_address, max_position_size?, max_single_trade?, daily_volume_limit?} objects, USD amounts (> 0, up to 6 decimals). Upserts by token_address; only the cap keys you include are written -- an omitted key keeps its stored value, an explicit null clears it (uncapped). Returns the full updated set read back from the server, plus enforcement (which rails read each column today). Pure Django write: unlike set_wallet_policy there is no Turnkey enclave re-push.

On a Lane 2 wallet, raising or clearing an existing cap is refused (POLICY_VIOLATION) -- the owner loosens it from their authenticated session. Tightening always applies.

Permission mode: a configuration write -- allowed in every permission_mode, observe included (same class as set_wallet_policy).

Param Type Required Default
wallet_address string yes
limits array<object> yes

Fee: free (read-only / control-plane). No x402 payment.

Social send & reputation

Status: Rolling out

Claimable crank.ing token links, Crank Score reputation.

send_token_social

Send tokens to an X handle via a claimable crank.ing link (non-custodial).

Locks amount (base units) of token (mint) from sender_wallet into the on-chain claim escrow against a fresh claim code, and returns an UNSIGNED base64 transaction for the sender to sign + broadcast, plus the crank.ing/{code} claim link and the claim_code (the bearer secret to embed in the announcement tweet). Whoever presents the code claims the tokens and binds referral on their first claim. expiry_days (optional, default 7, range 1-90) sets the claim window; unclaimed tokens are returned to the sender after expiry. Anti-abuse gated: sender account age, verified wallet, per-sender daily limit. platform: x.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result (same claim_code/link) instead of locking a second escrow.

Param Type Required Default
recipient_handle string yes
amount integer yes
token string yes
sender_wallet string yes
platform string no "x"
referral string no ""
expiry_days integer | null no
allow_unverified boolean no false
idempotency_key string no ""

Fee: free (read-only / control-plane). No x402 payment.

bulk_send_social

Distribute one token to many X handles in one call (non-custodial).

recipients is a list of {recipient_handle, amount, message?} dicts (recipient accepted as an alias; amount in base units; message an optional per-recipient note). Locks each amount of token (mint) from sender_wallet into a fresh claim escrow and returns the create_claim instructions batched into as few UNSIGNED transactions as fit -- the sender signs + broadcasts every returned tx. Each send carries its crank.ing claim link, the bearer claim_code (returned once, embed per tweet), and the transaction_index of the tx that funds it. Anti-abuse gated (account age, verified wallet, per-sender daily limit counting the whole batch). platform: x.

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result (same claim_codes/links) instead of locking a second batch of escrows.

Param Type Required Default
recipients array<object> yes
token string yes
sender_wallet string yes
platform string no "x"
referral string no ""
idempotency_key string no ""

Fee: free (read-only / control-plane). No x402 payment.

get_social_sends

A wallet's social token sends (newest first; no claim-code secrets).

Param Type Required Default
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

claim_status

Public status of a crank.ing claim code (status, amount, claimable, expiry).

Param Type Required Default
code string yes

Fee: free (read-only / control-plane). No x402 payment.

check_claim_status

Sender-facing claim status of a social send (FREE read).

Look up by claim_id (the send id) OR recipient (X handle); optionally scope a recipient lookup to one sender_wallet. Returns {"sends": [...]} each with status (pending/claimed/expired/returned), claim_date, returned_at, recipient_wallet, amount, claim_link, expiry_ts, and expires_in_seconds (a live countdown, 0 once expired). Never exposes the claim-code secret.

Param Type Required Default
claim_id integer | null no
recipient string no ""
sender_wallet string no ""

Fee: free (read-only / control-plane). No x402 payment.

get_crank_score

A wallet's Crank Score reputation breakdown (FREE read).

Returns total_score, per-activity components (trade / staking / strategy / social / claim), sybil_flagged + penalty_bps, and the score-gated perks it unlocks under gates: fee_discount_bps (additional technology service fee discount), daily_send_limit (higher social-send cap), priority_access, and the gate tier (0-3). Score accrues from on-platform activity; circular funding between wallets is flagged + penalised. Well-formed zeros for an unscored wallet.

Param Type Required Default
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

Alerts

Price / position alerts checked by Celery beat.

set_alert

Create a price/position alert checked every 60s by Celery beat.

alert_type: price_above | price_below | position_change. token is a mint address. Optional webhook_url is POSTed when the alert fires.

Free (no technology service fee) -- a control-plane write, moves no funds and has no transaction notional.

Workflow: MONITOR step -- arm after executing so a tripped level loops you back to the risk/execute phase. See get_trading_workflow.

Permission mode: a configuration write -- allowed in every permission_mode, observe included; the ladder gates value-bearing actions, not config.

Param Type Required Default
wallet_address string yes
token string yes
alert_type string yes
threshold number yes
webhook_url string | null no

Fee: free (read-only / control-plane). No x402 payment.

list_alerts

List a wallet's alerts -- what is currently armed. Free read.

Covers both price/position alerts (set_alert) and health-factor liquidation alerts (set_liquidation_alert) -- one table, told apart by alert_type. Default shows only ARMED alerts (active, not yet triggered) -- exactly the set the Celery evaluators will act on. include_triggered=True adds already- tripped and deactivated alerts (recent history). limit caps at 200.

Workflow: MONITOR step -- read before arming another alert so you do not duplicate a level that is already watched. Pairs with set_alert. See get_trading_workflow.

Param Type Required Default
wallet_address string yes
include_triggered boolean no false
limit integer no 50

Fee: free (read-only / control-plane). No x402 payment.

Workflow & discovery meta-tools

The ordered tool map for a freshly-discovered agent, plus keyword search over the full tool surface (progressive disclosure).

get_trading_workflow

Map of how Crank's tools fit into one end-to-end trading flow (read this first).

Read-only, free. Returns an ordered, machine-readable workflow: orient -> intelligence -> yields -> simulate (backtest) -> risk-size -> execute (non-custodial) -> monitor -> journal. Each step names the concrete tool(s) to call, their purpose, key inputs, how to use the output downstream, and the decision points that branch the flow -- so an agent that discovered Crank via tools/list can sequence the full tool surface instead of guessing. Descriptive only (DYOR); only execute-phase tools are value-bearing.

wallet_address (optional, PUBLIC key only -- non-custodial): when given, appends human_activity -- count + most-recent manual override on this shared account in the last 72h (decision_type, asset, rationale summary, timestamp) plus an instruction to reconcile with it before acting. Human and agents act on ONE account: every human action is journaled (see journal_query source="human") so it is never invisible to you. Absent/clean ({"count": 0}) when there is no override.

Param Type Required Default
wallet_address string no ""

Fee: free (read-only / control-plane). No x402 payment.

search_tools

Keyword search over the full Crank tool catalog (progressive disclosure).

Read-only, free, never gated. Purpose-built for a discovering agent that does not want to load the full tool catalogue into context just to find the one it needs ( R1 -- the Solana Agent Kit V1 failure mode: 60+ tools in context caused tool-selection hallucinations). Pass a keyword or short phrase (e.g. "perp funding rate", "stake sol", "referral"); matches rank by keyword overlap against each tool's name + description.

Returns up to limit (default 10, max 50) results, each {name, purpose, toolset} -- purpose is a one-line summary (call the tool itself, or get_trading_workflow, for the full picture), and toolset names which of the ten named toolsets (market_data, spot, perps, lending_staking, portfolio, strategies, intelligence, rewards_growth, wallet_admin, support) the tool belongs to. No tool is renamed or hidden by this search -- it is purely a discovery aid.

Param Type Required Default
query string yes
limit integer no 10

Fee: free (read-only / control-plane). No x402 payment.

Other

Tools not yet sorted into a category above.

approve_proposal

Approve a pending PROPOSAL within its TTL, then re-dispatch it (non-custodial control plane).

Flips a propose-mode proposal (see set_permission_mode) from pending to approved, then immediately re-invokes the original deferred tool call (stored tool_name + params) through this same dispatch table. On redispatch failure the proposal stays APPROVED (not silently EXECUTED or PENDING) -- call this again to retry. See wallets.approve_proposal.

Param Type Required Default
proposal_id string yes
approved_by string no ""

Fee: free (read-only / control-plane). No x402 payment.

authorize_session_signer

Refuses ALWAYS with BROWSER_CONFIRMATION_REQUIRED.

Minting (or reactivating) a session signer grants NEW signing authority -- a trust grant at least as sensitive as loosening a policy, which is already browser-gated. This tool therefore refuses EVERY call, for EVERY wallet (not only Lane 2), after validating capabilities for early UX. The only mint path is the browser handshake: request_session_signer_authorization (open) -> the wallet OWNER approves in their browser -> poll_session_signer_authorization (bind the stored payload). signer_pubkey is a keypair the USER creates and holds -- ONLY its PUBLIC key ever crosses this surface (hard rule 1); once authorized via the handshake, calls carrying it are trade-only under tx_verify (docs/SESSION_SIGNER_DESIGN.md).

Param Type Required Default
wallet_address string yes
signer_pubkey string yes
label string no ""
capabilities array<string> | null no
expires_at string no ""

Fee: free (read-only / control-plane). No x402 payment.

bridge_in

Fund your Solana wallet from a major EVM chain (non-custodial).

Cross-chain FUNDING rail (deBridge DLN): builds an UNSIGNED EVM transaction creating a bridge order that pays dst_token (a Solana mint, e.g. USDC) to wallet_address. Sign and broadcast the returned evm_transaction ({to, data, value}) with your OWN wallet (evm_sender) on src_chain -- Crank never signs, never broadcasts the EVM leg, and never holds funds in flight. amount is in source-token base units. Supported source chains: ethereum, arbitrum, base, optimism, polygon, bnb, avalanche, linea.

Fund from any major chain, execute on Solana: pair with jupiter_swap / strategies once the funds arrive (confirm with get_balances). Value-bearing (technology service fee via x402 past the daily free tier). Paper trading mode returns a simulated order with a real DLN quote.

idempotency_key (optional): retrying with the same key + args replays the original order instead of creating a second one.

Param Type Required Default
src_chain string yes
src_token string yes
amount integer yes
dst_token string yes
wallet_address string yes
evm_sender string yes
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

bridge_out

Bridge value from Solana out to a major EVM chain (non-custodial).

Cross-chain FUNDING rail (deBridge DLN), jupiter_swap two-phase pattern: without signed_transaction returns an UNSIGNED base64 Solana transaction creating the bridge order -- sign it with the wallet for wallet_address. With signed_transaction broadcasts the caller-signed tx and returns tx_signature + a verification block (gate follow-on decisions on verification.confirmed). src_token is the Solana mint committed, amount its base units; evm_recipient is YOUR address on dst_chain (ethereum, arbitrum, base, optimism, polygon, bnb, avalanche, linea).

Value-bearing (technology service fee via x402 past the daily free tier; charged once per order on the build leg, never re-charged on the completion leg). Paper trading mode returns a simulated order with a real DLN quote. idempotency_key (optional): reuse the SAME key across the build call and its signed_transaction completion retry.

order_id (optional): pass back the build leg's returned order_id on the signed_transaction completion call to reconcile both legs into one BridgeTransfer row -- then poll fulfillment with get_bridge_status(order_id).

Param Type Required Default
dst_chain string yes
dst_token string yes
src_token string yes
amount integer yes
wallet_address string yes
evm_recipient string yes
signed_transaction string | null no
verify boolean no true
order_id string no ""
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

claim_ilo_tokens

Status: Rolling out

Claim the launch tokens your liquidity release schedule has unlocked.

Returns an UNSIGNED release_tokens transaction (action: "sign_required") you sign with your own wallet and broadcast yourself. Crank NEVER co-signs a claim -- there is no backend signing path here by design (hard rule 1).

When nothing has unlocked yet -- before the cliff, or everything unlocked has already been released, or the launch has not succeeded -- this returns action: "nothing_to_claim" with the schedule and a next_release_check_ts, rather than a transaction the chain would reject. Free: a claim of your own allocation carries no technology service fee.

Workflow: SETTLE step -- poll get_my_pledge_status, claim when release.releasable_base_units is non-zero.

Param Type Required Default
launch_id integer yes
wallet_address string yes
pledger_token_account string no ""
idempotency_key string no ""

Fee: free (read-only / control-plane). No x402 payment.

clear_agnta_grant

Remove a wallet's AGNTA DelegationGrant cap opt-in (non-custodial control plane).

LOOSENS enforcement (removes a cap constraining every value-bearing call on top of WalletPolicy) -- for a Lane 2 wallet this raises BROWSER_CONFIRMATION_REQUIRED: call request_agnta_grant_clear instead and have the user approve it in their own browser. A non-Lane-2 wallet clears directly.

Param Type Required Default
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

compose_strategy

Validate a composite definition -- returns the normalised definition + validation report. No persist; read = FREE per the fee schedule.

Checks: schema, stream existence against the signal catalog, rule-tree depth/size limits, required risk caps, and the anti-gaming rule (a social sentiment/trend_social stream may never be the sole entry trigger).

Param Type Required Default
definition object yes

Fee: free (read-only / control-plane). No x402 payment.

create_execution_intent

Create a propose-only execution intent; returns an approval URL to hand to the user.

submit_mode (optional): omitted/"public" is unchanged and is named in summary.execution. "mev_protected" builds the tx with the caller-paid Jito tip (jito_tip_lamports, or the platform default) and the approved intent is relayed to the Jito block engine (bundle-only). A failed protected relay is never retried publicly on this rail.

Lane 1 (non-custodial default): builds the unsigned swap transaction server-side, persists it as an intent, and returns {intent_id, approval_url}. NOTHING executes until the user opens the approval URL in their browser and signs with their own wallet. This tool never signs and never sees a key. amount is in input-token base units. The quote includes the technology service fee. After the user approves, poll get_intent_status and report ONLY the persisted on-chain state (CONFIRMED before any success claim).

slippage_bps omitted (None) resolves to the published platform default of 50 bps -- unchanged from before; the returned summary's slippage.applied_source honestly reports "platform_default" in that case rather than falsely claiming "caller".

FEE PARITY: the on-chain technology service fee baked into the unsigned tx is now resolved through the SAME discount-aware pipeline as jupiter_swap -- the tokenized-security classification is resolved ONCE here via the authoritative registry-backed classifier (parity with jupiter_swap's call site) and, together with pay_in_crank, determines the quoted platformFeeBps. Without this an intent proposed via this Lane 1 rail could be fee-classified differently from the identical swap executed via jupiter_swap. Decision: pay_in_crank IS exposed here (not just is_security) -- the fee rate is a quote-time input baked into the unsigned tx before the user ever reaches the approve page, so an agent must be able to request the pay-in-$CRANK discount at proposal time, same as it can on the direct swap path.

GEO GATE: when either leg is a tokenized security this call is geo-gated (Reg S = no US persons) and OFAC-screened, same control jupiter_swap/trade_equity enforce -- jurisdiction declares the caller's jurisdiction once, ip is the caller's origin IP for the Reg-S IP layer.

include_slippage_advisory (default False) adds the venue's own suggested tolerance for this route to summary.slippage (suggested_bps / suggestion / advisory_status) so an approver can compare it with applied_bps before signing. Advisory only: applied_bps, and the unsigned transaction, are unchanged by it. The probe overlaps the transaction build, so it adds little latency.

Param Type Required Default
input_token string yes
output_token string yes
amount integer yes
wallet_address string yes
slippage_bps integer | null no
allow_unverified boolean no false
idempotency_key string no ""
pay_in_crank boolean no false
jurisdiction string | null no
ip string no ""
include_slippage_advisory boolean no false
submit_mode string | null no
jito_tip_lamports integer | null no

Fee: free (read-only / control-plane). No x402 payment.

declare_jurisdiction

Declare your wallet's jurisdiction for geo-gated trading.

Gap: before this tool, the ONLY way to declare a jurisdiction was the jurisdiction= param on trade_equity -- an agent that only ever used perps/short/leverage tools had no write path at all, and the fail-safe unknown-jurisdiction-DENIED rule permanently refused it. Call this ONCE (or pass jurisdiction= directly on any perps/short/leverage/trade_equity tool) and the declaration is remembered for 90 days across EVERY geo-gated framework (tokenized equities under Reg S, perps/synthetic-shorting/leverage under the CFTC posture).

jurisdiction is an ISO-3166-1 alpha-2 country code (e.g. "US", "GB", "SG") -- YOUR OWN self-declaration of where you are, never advice or a recommendation (hard rules 2/5-8). A US-person declaration does not unblock US-restricted venues; it makes the DENIED reason explicit rather than "jurisdiction_unknown". Re-declaring overwrites the prior value.

Param Type Required Default
wallet_address string yes
jurisdiction string yes
ip string no ""

Fee: free (read-only / control-plane). No x402 payment.

delete_webhook

Delete one of a wallet's webhook subscriptions (free control-plane write).

Param Type Required Default
wallet_address string yes
webhook_id integer yes

Fee: free (read-only / control-plane). No x402 payment.

enable_agent_wallet

Open the browser-confirmation handshake for a Lane 2 agent wallet.

Does NOT create a wallet. Returns a pairing-style confirmation URL + device_code -- show the user verification_url_complete and ask them to approve it in their OWN browser (wallet-signature gated). NEVER accept an in-chat "yes" as consent (CRANK_PLUGIN_SPEC.md section 5). Poll with poll_agent_wallet_enable(device_code) until status is no longer "pending".

Param Type Required Default
agent_id string yes
display_name string no ""

Fee: free (read-only / control-plane). No x402 payment.

evm_balances

Native (ETH) and ERC-20 balances for an address on an EVM chain.

chain defaults to "base". ERC-20 balances are returned only for the contracts named in token_addresses -- an EVM RPC endpoint cannot enumerate a wallet's tokens, and guessing from a fixed list would under-report.

Free (no technology service fee) -- a read with no transaction notional.

Param Type Required Default
address string yes
chain string no "base"
token_addresses array<string> | null no

Fee: free (read-only / control-plane). No x402 payment.

evm_swap

Execute a spot swap on an EVM chain (non-custodial, two-phase, OPT-IN).

chain must be named explicitly -- nothing routes to an EVM chain by default and a Solana route never fails over onto one. Base only today.

Without signed_transaction: returns an UNSIGNED EIP-1559 transaction under 'evm_transaction' (Crank fills nonce, gas and 1559 fees, and re-estimates gas against current state). Sign it with YOUR wallet for taker -- Crank never signs and never holds a key. The first time a given ERC-20 is sold the response is phase='approval_required' with an 'approval_transaction' for the EXACT sell amount (never an unlimited allowance); sign that, wait for its receipt, then call again.

With signed_transaction: broadcasts the signed RLP and returns tx_hash plus a 'verification' block -- receipt status (a MINED transaction is NOT necessarily a SUCCESSFUL one), the fill parsed from the ERC-20 Transfer log, and a balance cross-check. Gate follow-on decisions on verification.status == 'success'.

Value-bearing: the SAME technology service fee schedule as every other Crank venue, at the same rate -- there is no per-chain fee differentiation. Paper trading mode returns a real 0x quote and builds nothing signable.

idempotency_key (optional): reuse the SAME key across the SWAP build call and its signed_transaction completion retry. Do NOT carry a key across the approval_required response into the swap build that follows it -- those are two different calls, and the approval leg is not deduplicated at all (it builds nothing that could be duplicated: an ERC-20 approve SETS an allowance rather than adding to one, so re-issuing it is a no-op).

replace_nonce / replace_max_fee_per_gas / replace_max_priority_fee_per_gas (optional, all three together, BUILD leg only): rebuild this swap at the nonce of a transaction you already broadcast that is stuck unmined, with both EIP-1559 fee fields bumped past the ones it carries so a node accepts it as a replacement instead of rejecting it as underpriced. Pass the stuck transaction's own nonce and fee pair (decimal or 0x-hex). Sign and broadcast the result as normal -- whichever of the two transactions lands, only one can, because they share a nonce.

A replacement build IS billed the technology service fee, as its own action. It is a fresh 0x quote, a fresh gas estimate and a fresh transaction built against current state, and the fee is not suppressible on a leg the caller triggers by passing three parameters -- that would be a free-swap switch. Budget for it before replacing: a stuck swap that you replace costs two fees, not one.

Use a FRESH idempotency_key for a replacement call (or omit it). The replace_* values are part of the idempotency identity, so carrying the stuck build's key forward raises IDEMPOTENCY_CONFLICT (non-retryable) -- same key, different arguments. That refusal is deliberate: the alternative would be replaying the cached original build back at you, old nonce and old fees, which is silently NOT the replacement you asked for. Retries of the SAME replacement, under its own fresh key, deduplicate normally.

Param Type Required Default
sell_token string yes
buy_token string yes
sell_amount string yes
taker string yes
chain string no "base"
slippage_bps integer | null no
signed_transaction string no ""
expected_buy_amount string no ""
pre_buy_balance string no ""
verify boolean no true
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""
replace_nonce string no ""
replace_max_fee_per_gas string no ""
replace_max_priority_fee_per_gas string no ""

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

evm_swap_quote

INDICATIVE swap quote on an EVM chain (pricing and routing only).

sell_amount is in the sell token's base units. Returns no transaction and no calldata -- this quote is not executable and cannot be signed.

Free (no technology service fee) -- a read with no transaction notional.

Param Type Required Default
sell_token string yes
buy_token string yes
sell_amount string yes
chain string no "base"
taker string no ""

Fee: free (read-only / control-plane). No x402 payment.

evm_token_price

Indicative price of an ERC-20 token on an EVM chain, quoted via 0x.

Priced off routed liquidity (what one whole token sells for against quote_token, USDC by default), not an oracle.

Free (no technology service fee) -- a read with no transaction notional.

Param Type Required Default
token_address string yes
chain string no "base"
quote_token string no ""
amount string no ""

Fee: free (read-only / control-plane). No x402 payment.

get_arb_discrepancies

Persisted cross-venue discrepancy episodes (free read).

Already-debounced cross_exchange signals (each required >= N consecutive polls above the discrepancy threshold to exist at all), filtered to spread_bps >= min_spread_bps and optionally to assets, within window_hours. One entry per episode: venue pair, spread, first/last seen, persistence, reference price. Observed data, decision-support only -- ignores fees, slippage, and transfer latency; never an execution instruction. Not financial advice.

Workflow: INTELLIGENCE step -- pair with get_cross_exchange for the current live-ish read on a specific asset.

Param Type Required Default
min_spread_bps number no 30
assets array<string> | null no
window_hours integer no 24

Fee: free (read-only / control-plane). No x402 payment.

get_bridge_quote

Cross-chain bridge quote via deBridge DLN (FREE read, no execution).

Quote moving amount (source-token base units) of src_token on src_chain into dst_token on dst_chain. Supported chains: ethereum, arbitrum, base, optimism, polygon, bnb, avalanche, linea, solana (one side must be solana). Returns estimated destination amount, per-leg USD values, and DLN protocol costs. Use before bridge_in / bridge_out. Nothing is charged and no order is created.

Param Type Required Default
src_chain string yes
src_token string yes
amount integer yes
dst_chain string yes
dst_token string yes

Fee: free (read-only / control-plane). No x402 payment.

get_bridge_status

Poll a dispatched DLN bridge order's fulfillment status (FREE read).

Follow-up to bridge_in/bridge_out: a dispatched order stays "pending"/"broadcast" in Crank's own record forever unless polled -- this queries deBridge's dlnOrderStatus endpoint by order_id (returned as order_id from bridge_in / bridge_out) and best-effort updates the matching BridgeTransfer row. Returns dln_status (raw DLN value) and status (mapped onto pending/fulfilled/cancelled).

Param Type Required Default
order_id string yes

Fee: free (read-only / control-plane). No x402 payment.

get_collective_insights

Fleet-wide collective insights, historical performance data (free read).

Filters: asset (mint/symbol), strategy_type, insight_type (one of param_performance/signal_effectiveness/timing/venue_quality/crowding/ regime_conditional). Only active, current insights are ever returned. Each insight carries n (contributing agents), effect_size, a confidence interval, crowding_index, staleness (age and expiry), and a rendered human-readable statement; detail=full adds the observed params and signal_keys. Every response is historical collective performance data aggregated across the Crank agent fleet -- descriptive only, never a recommendation or a promise of results.

Workflow: INTELLIGENCE step -- fleet-wide context alongside get_market_briefing / get_consensus before sizing or creating strategies.

Param Type Required Default
asset string no ""
strategy_type string no ""
insight_type string no ""
detail string no "concise"

Fee: free (read-only / control-plane). No x402 payment.

get_cross_exchange

Cross-venue snapshot for one asset (free read).

Per-venue price/bid/ask/movement (5m/1h/24h change), the pairwise spread matrix (bps), the widest current spread, and -- for wrapped-asset legs (BTC/ETH) only -- the Solana-DEX wrapped-asset premium vs the CEX-consensus reference price. Observed data, decision-support only -- spreads ignore fees, slippage, and cross-venue/bridge transfer latency; never an execution instruction. Not financial advice.

Workflow: INTELLIGENCE step -- pair with get_arb_discrepancies for the persisted, already-debounced episode history.

Param Type Required Default
asset string yes
window_minutes integer no 60

Fee: free (read-only / control-plane). No x402 payment.

get_emerging_patterns

Anonymized emergent fleet behaviour motifs (free read).

Returns ordered behaviour motifs -- sequences of (regime, signal_key, action, outcome_sign) steps -- that many distinct agents exhibited and that map to NO existing strategy type in the standing taxonomy. Each carries n_agents, an anonymized aggregate effect_size with a confidence interval, and staleness. Filter with min_agents; limit caps the result count (max 100). No wallet address or cohort key is ever returned. Historical collective performance data aggregated across the Crank agent fleet -- descriptive only, never a recommendation or a promise of results.

Workflow: INTELLIGENCE step -- see what the fleet is doing that no existing strategy type describes, before designing a new strategy.

Param Type Required Default
min_agents integer no 0
limit integer no 20

Fee: free (read-only / control-plane). No x402 payment.

get_ilo_adoption_status

The ILO adoption gate -- one machine-checkable readiness read (free).

Published Engaij, Inc. policy: the ILO proceeds only once Crank has 1,000 active users, where an active user has at least 5 executed Crank transactions inside a rolling 7-day window. Signups do not count. Returns gate_met (active_users >= 1000), active_users, near_active_users, users_with_any_tx and the pinned transaction definition. A transaction is an EXECUTED trade only -- a recorded swap (broadcast signature required), a perp open, or a user-initiated perp close; reads, quotes, unexecuted intents, paper trades, liquidations and devnet activity never count. cluster=devnet exposes the same metric for pre-launch observability; the gate itself is the mainnet number. Aggregate counts only, no per-wallet data. A launch prerequisite (one required condition alongside legal sign-off and the other launch prerequisites); not a launch date, promise, or timeline.

Param Type Required Default
cluster string no "mainnet"

Fee: free (read-only / control-plane). No x402 payment.

get_ilo_details

Read a token launch live from chain (free): terms, status, escrow balances, and a machine-readable liquidity release schedule.

launch_id is the on-chain u64 launch identifier. Returns the raise window and progress, the per-wallet pledge cap (0 = uncapped), live escrow + launch-vault balances, and a release_schedule block (cliff-then-linear) an agent can plan future claim_ilo_tokens calls from without parsing prose. Pass caller_wallet to attach that wallet's own pledge summary too (the authoritative per-wallet view is get_my_pledge_status).

Utility token fair launch: participating commits funds to a non-custodial escrow; it is not a purchase of an expectation of profit.

Workflow: DISCOVER step -- read details, check the window and the per-wallet cap, then preview with pledge_to_ilo (plan mode) before committing anything.

Param Type Required Default
launch_id integer yes
caller_wallet string no ""

Fee: free (read-only / control-plane). No x402 payment.

get_indicators

Full standard technical-indicator set for one asset/timeframe (read-only).

Computes sma, ema, macd, adx (+DI/-DI), rsi, stochastic (%K/%D), roc, bollinger (mid/upper/lower/width/%B), atr, keltner, realised_vol, vwap, volume_ratio and volume_profile (POC / value area / high-volume-node liquidity bands with 0-1 depth scores) from recent OHLCV via the canonical backend/indicators library. asset is a token mint; timeframe one of 1m/5m/15m/1h/4h/1d; indicators selects a subset (empty = all); lookback candles capped at 500; params overrides per indicator, e.g. {"rsi": {"period": 21}}; include_series=true adds per-bar series (last 200 points). Readings are None while history is warming up. Computed readings only -- not financial advice, not a trade instruction (DYOR). No wallet, no fee, no on-chain action.

Workflow: INTELLIGENCE step -- raw indicator readings underlying detect_regime; pair with get_ml_signal (forecast) + get_signals (persisted cross-source signals). See get_trading_workflow.

Param Type Required Default
asset string yes
timeframe string no "1h"
indicators array<string> | null no
lookback integer no 200
params object | null no
include_series boolean no false

Fee: free (read-only / control-plane). No x402 payment.

get_integrator_earnings

Per-action + per-month integrator $CRANK reward rows. Read-only.

Monthly rollup of earning_events + amount_base_units; recent rows carry crank_amount (null while unpriced). $CRANK only, no USD reward figure.

Param Type Required Default
integrator_wallet_address string yes
limit integer no 100

Fee: free (read-only / control-plane). No x402 payment.

get_integrator_stats

Integrator dashboard: status, share, onboarded count, $CRANK reward state.

Read-only. Rewards are $CRANK only: reward_asset, pre_mint and $CRANK buckets (accrued/pending/claimable/paid, each count/priced_count/ amount_base_units). No USD reward figure, never PnL -- a fee-share, never a performance-share.

Param Type Required Default
integrator_wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

get_intent_status

Read the persisted lifecycle state of an execution intent (free read).

Returns the server-persisted state only -- CREATED, APPROVED, SUBMITTED, UNKNOWN, CONFIRMED, FAILED, or EXPIRED -- plus the simulation summary and the on-chain signature once submitted. Never infers: UNKNOWN means an unresolved send (may have landed); only CONFIRMED is a verified on-chain success (fail-closed reporting, docs/CRANK_PLUGIN_SPEC.md section 6).

Param Type Required Default
intent_id string yes

Fee: free (read-only / control-plane). No x402 payment.

get_journal_card

Status: Rolling out

Build the shareable journal card for one of YOUR decisions (free read).

Every trading claim online is an unverifiable screenshot. This one is not: the card carries what you decided, the process you followed, what the record shows happened, and a public explorer link to the on-chain transaction so anyone can check it without a Crank account. It also carries a schema.org JSON-LD node so the public card page is citable by answer engines.

The card is a CRAFT record -- decision type, whether an expectation was stated up front, which outcome horizons were recorded, whether the stated expectation and the record line up, how confidently the record attributes to on-chain fills. It deliberately carries no amounts and no percentages: it is a record of process, not a claim about results.

include_rationale (default false) opts your own journal rationale and intended action into the public card. Your journal body is private to your wallet, so publishing any of it is always an explicit act.

Workflow: after journal_append / journal_query -- pick a decision you want to show, then share_journal_card to get the pre-filled post.

Param Type Required Default
wallet_address string yes
decision_id string yes
include_rationale boolean no false

Fee: free (read-only / control-plane). No x402 payment.

get_market_regime

Market-wide regime from the persisted regime/macro signal feed (free read).

Returns the dominant regime, its confidence, a distribution across observed regimes, and the contributing signals. For a live per-asset regime computed from OHLCV, use detect_regime instead. Descriptive observed data only. Not financial advice.

Workflow: INTELLIGENCE step -- market-wide posture check before choosing a strategy type or direction_mode; pair with detect_regime for the asset leg.

Param Type Required Default
window_hours integer no 24
limit integer no 20

Fee: free (read-only / control-plane). No x402 payment.

get_my_contribution_score

Your own hive contribution score for a monthly epoch (free read).

Wallet-scoped -- returns ONLY your wallet's own row, never another wallet's score and never a fleet ranking. epoch is "YYYY-MM" and defaults to the most recently completed month.

Contribution quality reflects how much your journaled decisions genuinely improved the collective intelligence pool: accurate, verifiable, original contributions score well; copies and noise do not. flags explains a zero score, e.g. below the activation threshold or no on-chain-verified outcome.

Any recognition of contribution quality from the Community Rewards Pool is discretionary, retroactive and effort-gated -- never a yield, a return, an earn-rate, or a promise of a future allocation.

Workflow: REVIEW step -- read alongside get_my_performance to see how your journalling habits, not just your P&L, land with the network.

Param Type Required Default
wallet_address string yes
epoch string no ""

Fee: free (read-only / control-plane). No x402 payment.

get_my_performance

Your own realised performance, grouped (free read).

Aggregates your journaled non-paper outcomes: win rate, total/average realised P&L (USD), and technology-service-fee drag, grouped by strategy_type | asset | decision_type | hour_of_day over window_hours. Includes a calibration score (your stated expectations vs the realised 24h move) when you journal expectations. Historical performance data about your own decisions -- descriptive only, not a recommendation.

Workflow: ORIENT step -- read this before sizing or creating strategies.

Param Type Required Default
wallet_address string yes
group_by string no "strategy_type"
window_hours integer no 720

Fee: free (read-only / control-plane). No x402 payment.

get_my_pledge_status

Status: Rolling out

Read your own on-chain Pledge record for a launch (free).

Returns how much this wallet has pledged, its share of the raise, its remaining headroom under the per-wallet cap, the projected pro-rata allocation, how much the liquidity release schedule has unlocked vs already released, and whether an on-chain refund is available (refunds open only if the raise FAILS its minimum).

Workflow: MONITOR step -- poll this between the cliff and full release to decide when a claim_ilo_tokens call is worth making.

Param Type Required Default
launch_id integer yes
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

get_ooda_status

Wake-on-condition consent + usage status.

Returns opted_in, daily_wake_budget, wakes_used_today, skips_today, and recent_wakes -- including SKIPPED_BUDGET / SKIPPED_SPEND_CAP rows, so a skipped wake is exactly as visible as a completed one, never silent. Also returns the usage-vs-fee-revenue kill threshold config and state: kill_threshold_enabled, kill_threshold_ratio, kill_window_days, and -- if this wallet was auto-killed -- kill_switched_at and kill_reason, so a wallet can see why wakes stopped.

Workflow: status/observe step -- check this to see whether the background worker is watching, and what it did (or skipped) recently.

Param Type Required Default
wallet_address string yes
recent_limit integer no 10

Fee: free (read-only / control-plane). No x402 payment.

get_portfolio_charter

Read the wallet's active portfolio charter -- the CRANK.md-equivalent mandate (free read).

A user-authored document declaring objectives, risk_band, banned tokens, target_allocations, max_position_pct, rebalance cadence, and an escalation webhook -- loaded once per session so the mandate persists across every downstream call instead of being re-supplied ad hoc. has_charter is False when the wallet has not set one yet -- call set_portfolio_charter to create it. Descriptive framing only ("objectives"/"parameters", never return targets, hard rules 5-8).

Workflow: ORIENT step 0 -- read this FIRST, before get_balances / portfolio_snapshot, so every downstream decision is framed by it.

Param Type Required Default
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

get_quests

Live Crank Score quests + a wallet's progress (FREE read).

Time-bounded, admin-configured campaigns (e.g. "Trade $1000 this week = 500 pts"). Each quest carries its tracked costly metric, target_value, reward_points, the active window, and -- when wallet_address is given -- the wallet's progress_value + completion state. Carries the disclaimer.

Param Type Required Default
wallet_address string no ""

Fee: free (read-only / control-plane). No x402 payment.

get_score

User-facing Crank Score: rank, multiplier, metrics + quests (FREE).

The campaign-layer view on top of get_crank_score. Returns total_score, leaderboard rank + percentile, the applied multiplier_bps (streak / early-adopter / strategy-creator), the wallet's costly-action metrics (fee_volume_usd, strategies_published, clones_spawned, referrals_activated, active_days), and its live quests with progress. Points come ONLY from costly actions (anti-farm). disclaimer: score MAY inform a future token distribution -- no fixed conversion ratio, no entitlement.

Param Type Required Default
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

get_score_leaderboard

Top-N Crank Score leaderboard (FREE read).

Ranked descending by total_score. limit caps at the admin-configured leaderboard_size. Each entry: rank, wallet_address, total_score, the base/action/quest components, multiplier_bps, streak_days, percentile. Also returns total_participants and the pre-token disclaimer. (Distinct from get_leaderboard, which ranks strategy templates.)

Param Type Required Default
limit integer | null no

Fee: free (read-only / control-plane). No x402 payment.

get_signal_effectiveness

Fleet action-conditioned signal effectiveness (free read).

Filters: source_type (e.g. youtube/rss/api/on_chain), signal_type, window (24h|7d|30d|90d|all). Returns, per matching signal_effectiveness collective insight, the fleet action taken, effect_size, confidence interval, contributing-agent count n, crowding_index, and staleness. Historical collective performance data aggregated across the fleet -- descriptive only, never a recommendation or a promise of results.

Workflow: INTELLIGENCE step -- weigh a signal by how the FLEET's actions on it have historically resolved, alongside your own get_source_accuracy / get_my_performance track record.

Param Type Required Default
source_type string no ""
signal_type string no ""
window string no "30d"

Fee: free (read-only / control-plane). No x402 payment.

get_signals

Filtered, most-recent-first feed of structured market signals (free read).

The observed-signal data spine: squeeze / flow / technical / microstructure / behavioral / liquidity / safety / whale / regime / macro / oracle / event / composite signals persisted by the collectors. subject matches a token symbol/market or its stable ref (mint / market address); signal_type / tier (a|b|c) / risk_level (none..critical) / min_score narrow the feed. Unknown filter values are dropped, not errored. Descriptive observed data only -- never a trade instruction. Not financial advice.

Workflow: INTELLIGENCE step -- pair with get_market_briefing (macro) and get_token_risk_assessment (per-token safety roll-up) before sizing.

Param Type Required Default
subject string no ""
signal_type string no ""
tier string no ""
risk_level string no ""
min_score number | null no
limit integer no 50
include_expired boolean no false

Fee: free (read-only / control-plane). No x402 payment.

get_source_weights

Source-effectiveness weight table (free read).

Per (source, signal_type, regime): graded evaluation counts, the smoothed effectiveness weight (social sources hold a low prior until sufficiently graded -- the anti-gaming cold start), the fleet Layer-2 multiplier from released anonymized fleet insights, and the combined weighted value the composite effectiveness_weighted transform consumes. Historical grading statistics only -- descriptive, never advice. Not financial advice.

Workflow: COMPOSE step -- read alongside list_signal_catalog to pick streams with a real graded track record before authoring a definition.

No parameters (besides caller_id).

Fee: free (read-only / control-plane). No x402 payment.

get_strategy_evolution_report

Clone-marketplace live performance deltas + approvals (free read).

Per published template: its live clone-fleet performance payload (average profit and loss in bps across distinct cloning wallets over the trailing 30 days, anonymized, self-clones excluded), the change vs the previous refresh, and the approval trail for templates that came through the propose-and-approve governance path. A template without enough live clone history reports available=false with a reason -- never a number computed from too few wallets. Draft proposals are never included. Historical data only -- descriptive, never a recommendation or a promise of results.

Workflow: INTELLIGENCE step -- compare marketplace templates on OBSERVED live clone history before cloning one via clone_strategy.

Param Type Required Default
strategy_type string no ""
limit integer no 20

Fee: free (read-only / control-plane). No x402 payment.

get_strategy_leaderboard

Anonymized fleet strategy-parameter leaderboard (free read).

Ranks param_performance collective insights by effect_size within window (24h|7d|30d|90d|all). NEVER identifies a wallet or cohort -- rankings are anonymized param-bucket aggregates only, and any bucket without broad enough backing across the fleet is dropped before it ever reaches this response. Historical collective performance data -- descriptive only, never a recommendation or a promise of results.

Workflow: INTELLIGENCE step -- compare a strategy_type's own parameter choices against fleet-wide observed outcomes before adjusting via suggest_parameter_adjustment / the strategy tools.

Param Type Required Default
strategy_type string no ""
window string no "30d"

Fee: free (read-only / control-plane). No x402 payment.

get_strategy_suggestions

Signal-to-action suggestions from the synthesis engine (free read, G4).

Per-asset directional observations aggregated hourly from the accuracy- weighted intelligence consensus (get_consensus math) plus the Fear & Greed context, each carrying a ready-to-use strategy config. PROPOSE flow: this tool never executes anything -- act on a suggestion by creating the strategy through the normal strategy tools (your wallet policy and the engine's risk / conflict / guardrail gates still apply), or approve it in the app. status filters proposed|approved|dismissed|executed|expired|all. Informational descriptions of observed data only. Not financial advice.

Workflow: INTELLIGENCE -> DECIDE step -- review suggestions, then pair with backtest_strategy + get_risk_assessment before any create call.

Param Type Required Default
status string no "proposed"
asset string no ""
limit integer no 20

Fee: free (read-only / control-plane). No x402 payment.

get_token_risk_assessment

Per-token risk roll-up over recently observed safety signals (free read).

Folds every non-expired signal for subject (symbol or mint) in the window into the worst risk level seen, a 0..1 risk score, a per-level count breakdown, and the contributing signals (worst-first). Complements -- does not replace -- get_risk_assessment (regime + position-size guards for deploying a strategy). Descriptive observed data only. Not financial advice.

Workflow: INTELLIGENCE / RISK step -- run before quoting or sizing an unfamiliar token; a critical safety signal is a hard skip condition.

Param Type Required Default
subject string yes
window_hours integer no 168
limit integer no 50

Fee: free (read-only / control-plane). No x402 payment.

intelligence_suggestion_approve

Approve a StrategySuggestion, optionally creating the suggested Strategy.

Closes the PROPOSE loop for MCP-only agents: wraps the same approve-and-create service logic as the REST StrategySuggestionViewSet.approve action instead of a manual suggested_config round-trip through the strategy create tools, which silently drops the suggestion linkage (StrategySuggestion.created_strategy / hive DecisionRecord.suggestion FK provenance). wallet_address is the caller's own wallet (recorded as approved_by_wallet); when agent_wallet_id also resolves to a wallet wallet_address controls, the suggested Strategy is created through the same executor dry-run gate as every other create path. config_overrides merges over suggested_config (e.g. a real usd_per_buy). A wallet without a Turnkey signer still gets the strategy -- paper trade, unsigned tx per tick. Informational rationale only (rules 5-8); the created strategy still runs only through the existing engine gates.

Workflow: DECIDE -> EXECUTE step -- the MCP-only closing move for get_strategy_suggestions; pair with backtest_strategy + get_risk_assessment first for the same guardrails any other create path gets.

Param Type Required Default
suggestion_id integer yes
wallet_address string yes
agent_wallet_id integer | null no
config_overrides object | null no
interval_seconds integer no 3600

Fee: free (read-only / control-plane). No x402 payment.

journal_append

Record a decision in your private, wallet-scoped journal (free write).

Your durable memory on Crank: rationale, intended action, and optional expectations (e.g. {"direction": "up", "horizon": "24h"}) are stored as one opaque body only you can read back; the system later attributes realised P&L from on-chain-verified fills and marks prices at 1h/24h/7d/30d horizons. idempotency_key makes replays safe (offline queues / batch agents). Link evidence via signal_ids / suggestion_id / strategy_id (your own strategies only). Autonomous strategy executions are journaled for you automatically -- use this to add the agent-authored layer on top.

tx_signature (optional): pass the signature a swap/perp/lend/stake tool just returned to link this decision to its verified on-chain fill -- the proof the Layer 2 contribution firewall needs. Unknown signature for this wallet -> 404. If omitted, the wallet's most recent CONFIRMED transaction within a short window is auto-linked as a best-effort fallback -- explicit is still more reliable, pass it whenever you have it.

Workflow: DECIDE step -- journal before (or as) you act; query it back with journal_query / get_my_performance.

Param Type Required Default
wallet_address string yes
decision_type string yes
rationale string yes
intended_action string no ""
expectations object | null no
signal_ids array<integer> | null no
suggestion_id integer | null no
strategy_id integer | null no
asset string no ""
idempotency_key string no ""
session_id string no ""
client_platform string no ""
tx_signature string no ""

Fee: free (read-only / control-plane). No x402 payment.

journal_query

Read your own decision journal, most recent first (free read).

Wallet-scoped: only decisions journaled for wallet_address are ever returned. Filters: window_hours (0 = all), decision_type, strategy_type, asset (mint/symbol as journaled), outcome_sign (positive|negative|zero on realised P&L), source (agent|system|human -- pass source="human" to see only a manual override on this shared account: human and agents act on ONE account, and every human action is journaled so agents can see and reconcile with it). Every returned row carries its source. detail=concise returns id/type/timestamp/pnl rows (token-budget friendly); detail=full adds bodies, evidence refs, and full outcome marks.

Workflow: ORIENT step -- recall what you decided (and what a human may have overridden) before deciding again.

Param Type Required Default
wallet_address string yes
window_hours integer no 0
decision_type string no ""
strategy_type string no ""
asset string no ""
outcome_sign string no ""
source string no ""
detail string no "concise"
limit integer no 50

Fee: free (read-only / control-plane). No x402 payment.

list_session_signers

List all delegated session signers (active + revoked) for a wallet.

Param Type Required Default
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

list_signal_catalog

Catalog of every available signal stream (free read).

One entry per signal source across all tiers -- on-chain collectors, free API sources, derived analyzers and external provider adapters -- with tier, cost-gate state (paid Tier-D gates are fail-closed and disabled by default), coverage window (earliest/latest persisted signal -- the honest backtest window), effectiveness stats (graded evaluation count + correct rate) and a gameability class (social streams rank high -- they carry anti-gaming caps). Descriptive historical data only. Not financial advice.

Workflow: COMPOSE step -- enumerate streams before authoring a composite strategy definition; pair with get_signals to inspect a stream's feed.

Param Type Required Default
include_inactive boolean no true

Fee: free (read-only / control-plane). No x402 payment.

list_webhooks

List a wallet's webhook subscriptions (free read; secrets are never returned).

Param Type Required Default
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

pause_wallet

Owner pause of an agent wallet (reversible).

Sets status=suspended and pauses its active strategies, so the policy gate refuses every value-bearing action until resume_wallet. Same semantics as the web Agent console pause. Refused on a killed or already-paused wallet.

Param Type Required Default
wallet_address string yes
reason string no ""

Fee: free (read-only / control-plane). No x402 payment.

pledge_to_ilo

Status: Rolling out

Pledge to a token launch. PLAN MODE BY DEFAULT (non-custodial).

amount is in pledge-mint BASE UNITS (USDC is 6dp: 1_000_000 = 1 USDC).

Default (confirm=false) returns action: "plan" -- a preview that evaluates every on-chain guard off-chain first (launch status, pledge window, remaining capacity, per-wallet cap) plus the anti-sybil screen and a pro-rata allocation projection. Nothing is built and nothing moves.

confirm=true returns action: "sign_required" with an UNSIGNED base64 transaction you sign with your own wallet and broadcast yourself. Crank never holds your keys. A pledge is irreversible once broadcast: the on-chain refund path opens only if the raise fails its minimum.

Utility token fair launch -- this commits funds to a non-custodial escrow. It is not a purchase of any expectation of profit and confers no claim on issuer revenue. The technology service fee applies past the daily free tier (x402 payment_header; set pay_in_crank for the $CRANK discount).

idempotency_key (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of pledging twice.

US persons are blocked (Reg S-flavoured geo-posture, I4), and persons in Australia are blocked by a second independent layer: declare jurisdiction (ISO-3166-1 alpha-2) or rely on a stored attestation; unknown jurisdiction is DENIED. confirm=true additionally requires disclosures_acknowledged=true -- read the mandatory pre-pledge disclosure block (get_ilo_details or a plan-mode preview) first (I2).

Workflow: EXECUTE step -- get_ilo_details, then plan-mode preview, then confirm=true. Track it afterwards with get_my_pledge_status.

Param Type Required Default
launch_id integer yes
amount integer yes
wallet_address string yes
pledger_token_account string no ""
confirm boolean no false
payment_header string no ""
pay_in_crank boolean no false
idempotency_key string no ""
jurisdiction string no ""
ip string no ""
disclosures_acknowledged boolean no false

Fee: value-bearing -- the technology service fee applies; past the daily free tier a verified x402 payment_header is required. Set pay_in_crank=true for the $CRANK discount.

poll_agent_wallet_enable

Poll a Lane 2 enablement request; provisions the wallet ONLY once approved.

On approval, applies the server-enforced conservative Lane 2 default policy (per-tx $50, daily $200, SOL+USDC only, 10% drawdown halt) and a 10-execution training-wheels counter, then returns the policy READ BACK from the server -- never the intended one.

Param Type Required Default
device_code string yes

Fee: free (read-only / control-plane). No x402 payment.

poll_agnta_grant_clear

Poll a grant-clear request; clears the AGNTA grant ONLY once approved.

Returns {"status": "pending"} while waiting, {"status": "expired"} for an unknown/expired code (never fabricates approval), or on approval clears through the same rails clear_agnta_grant uses for a non-Lane-2 wallet.

Param Type Required Default
device_code string yes

Fee: free (read-only / control-plane). No x402 payment.

poll_agnta_identity_registration

Complete (or re-check) an owner wallet's AgentIdentity binding from chain.

The poll half of the handshake: for an owner who signed AND submitted the register_identity transaction themselves, this is the only call needed. Verifies the on-chain AgentIdentity account exactly as submit_agnta_identity_registration does and stamps registered only on success; otherwise it returns the wallet's current stored status with verified: false and stamps nothing.

Param Type Required Default
wallet_address string yes
identity_pda string yes

Fee: free (read-only / control-plane). No x402 payment.

poll_session_signer_authorization

Poll a signer-authorization request; authorizes ONLY once approved.

Returns {"status": "pending"} while waiting, {"status": "expired"} for an unknown/expired code (never fabricates approval), or on approval binds the signer through the same rails authorize_session_signer uses and returns the created session_signer row.

Param Type Required Default
device_code string yes

Fee: free (read-only / control-plane). No x402 payment.

poll_wallet_policy_loosening

Poll a policy-loosening request; applies it ONLY once approved.

Returns the policy READ BACK from the server after the write -- never the requested one.

Param Type Required Default
device_code string yes

Fee: free (read-only / control-plane). No x402 payment.

propose_allocation

Ranked allocation plan: intent + balances + regime + yields + ML signals (free read).

One call composes the read-only surfaces an agent would otherwise orchestrate by hand -- lending supply APYs, LST staking yields, the per-asset market regime, and the ML ensemble signal -- into a ranked, intent-shaped plan (conservative | balanced | aggressive). Each directional entry names the exact backtest_strategy args to validate it BEFORE deploying, plus the follow-up tool that would act on it. Descriptive analytics only -- never advice, never a promise of results; nothing is executed.

Workflow: INTELLIGENCE/ANALYSIS step -- call after get_market_briefing and before backtest_strategy / get_risk_assessment / strategy_*_create.

Param Type Required Default
intent string no "balanced"
wallet_address string no ""
assets array<string> | null no
timeframe string no "1h"

Fee: free (read-only / control-plane). No x402 payment.

propose_template_update

Propose a DRAFT strategy template from an emerging pattern.

PROPOSE-AND-APPROVE ONLY. Creates a draft template that is NOT published, NOT verified and NOT eligible for cloning; an administrator must explicitly approve it before it can appear in the marketplace. This tool can never publish, verify, or modify an existing live template, and never auto-applies anything. pattern_id comes from get_emerging_patterns; only an active, released pattern may be proposed. Descriptive historical observation -- not a recommendation, not financial advice, and not a promise of future results.

Workflow: PROPOSE step -- raise an observed emergent motif for human review; approval and any publication remain a human decision.

Param Type Required Default
pattern_id string yes
name string no ""
description string no ""

Fee: free (read-only / control-plane). No x402 payment.

register_counterparty_set

Register/replace/clear the AGNTA counterparty allow-set for the caller's opted-in DelegationGrant (non-custodial control plane).

Persists to Django so the set survives an MCP process restart and is visible to every process -- the durable successor to the earlier process-local InMemoryCounterpartySetResolver. wallet_address must belong to an AgentWallet with a non-blank agnta_grant_pda already configured (opting in is a separate step, out of scope here); the target grant_pda is always resolved from that wallet, never caller-supplied. members is a list of base58 32-byte destination pubkeys the grant's counterparty_root should allow -- pass an EMPTY list to CLEAR the registered set, after which every transfer-class call naming an on-chain destination for this grant fails closed.

expected_root (hex, optional but STRONGLY recommended): compare against the grant's live on-chain counterparty_root (hex-encoded) before calling this -- when given, a set that does not commit to it is refused (INVALID_PARAMS) rather than silently registered, which would otherwise surface later as a confusing AGNTA_GRANT_COUNTERPARTY_DENIED on an unrelated transfer.

Param Type Required Default
wallet_address string yes
members array<string> yes
expected_root string no ""

Fee: free (read-only / control-plane). No x402 payment.

register_integrator

Register an agent integrator by its payout wallet -- lands PENDING.

The Jupiter-integrator self-serve onboarding step. The profile earns NOTHING until an admin approves it and sets its fee-share (anti-gaming whitelist). Idempotent on wallet_address. Returns the integrator stats.

Param Type Required Default
wallet_address string yes
name string no ""
contact_email string no ""
agent_id string no ""

Fee: free (read-only / control-plane). No x402 payment.

register_referrer

First-touch bind an onboarded agent wallet to an approved integrator.

First-touch wins: a wallet already attributed to any integrator keeps that binding. Requires the integrator be approved; rejects a self-referral.

Param Type Required Default
integrator_wallet_address string yes
referred_wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

register_webhook

Register (or reactivate) a lifecycle-event webhook for a wallet (free control-plane write).

event_types is a non-empty subset of: pre_trade (advisory only, never blocks a trade), post_trade, policy_violation, drawdown_warning, strategy_executed. url is your https(s) receiving endpoint. secret is YOUR OWN HMAC-SHA256 signing secret (8-128 chars) -- Crank never sends or stores platform key material here (hard rule 1); you use it to verify the X-Crank-Signature header on every delivered event (see docs/WEBHOOKS.md). Re-registering the same (wallet_address, url) pair updates its event_types/secret and reactivates it if it was auto-disabled after repeated delivery failures.

Param Type Required Default
wallet_address string yes
event_types array<string> yes
url string yes
secret string yes

Fee: free (read-only / control-plane). No x402 payment.

report_registry_install

Self-report an MCP-registry install/discovery event.

Producer for the registry_install inbound-artifact leg that growth_metrics.organic_integration_candidates already consumes: call this once, with your own stable caller_id, after your server installs/discovers Crank via an MCP registry listing (Smithery, PulseMCP, the official MCP registry). Writes a synthetic marker row -- moves no funds, never fee-gated, and is idempotent per-process (a repeat call for the same caller_id is a documented no-op).

No parameters (besides caller_id).

Fee: free (read-only / control-plane). No x402 payment.

request_agnta_grant_clear

Open the browser-confirmation handshake to clear a Lane 2 wallet's AGNTA grant cap.

Call this when clear_agnta_grant refuses with BROWSER_CONFIRMATION_REQUIRED. Does NOT clear the grant -- returns a confirmation URL like request_wallet_policy_loosening; the wallet's OWNER must approve in their own browser (never in-chat). Poll with poll_agnta_grant_clear(device_code) once approved.

Param Type Required Default
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

request_agnta_identity_registration

Re-enter an AGNTA AgentIdentity binding that has not reached registered.

Branches on SIGNING CAPABILITY, not on a status label: an OWNER / SessionSigner wallet is moved to pending and handed a fresh UNSIGNED register_identity instruction -- the OWNER signs it with their own wallet (no key material ever reaches Crank, hard rule 1) and then calls submit_agnta_identity_registration, or submits it themselves and calls poll_agnta_identity_registration. A TURNKEY-AUTONOMOUS wallet re-runs the real build + sign + submit instead. An already-registered wallet is a no-op.

Param Type Required Default
wallet_address string yes

Fee: free (read-only / control-plane). No x402 payment.

request_session_signer_authorization

Open the browser-confirmation handshake to authorize a session signer.

The ONLY way to mint a session signer -- authorize_session_signer always refuses with BROWSER_CONFIRMATION_REQUIRED for every wallet. Does NOT authorize the signer -- returns a confirmation URL like enable_agent_wallet; the wallet's OWNER must approve in their own browser (wallet-signature gated, never in-chat). Poll with poll_session_signer_authorization(device_code) once approved.

Param Type Required Default
wallet_address string yes
signer_pubkey string yes
label string no ""
capabilities array<string> | null no
expires_at string no ""

Fee: free (read-only / control-plane). No x402 payment.

request_wallet_policy_loosening

Open the browser-confirmation handshake to loosen a Lane 2 wallet's policy.

Call this when set_wallet_policy refuses a change with BROWSER_CONFIRMATION_REQUIRED. Does NOT apply the policy -- returns a confirmation URL like enable_agent_wallet. Poll with poll_wallet_policy_loosening(device_code) once the user approves.

Param Type Required Default
wallet_address string yes
policies array<object> yes

Fee: free (read-only / control-plane). No x402 payment.

resume_wallet

Owner resume of an owner-paused agent wallet.

Lifts only a pause the owner applied (pause_wallet or the web console) -- never an operations or wallet-recovery suspension -- and re-activates only the strategies that pause stopped. Killed wallets stay killed. Requires an owner-authenticated plugin token (wallet_admin scope); refused while a wallet recovery is in progress.

Param Type Required Default
wallet_address string yes
reason string no ""

Fee: free (read-only / control-plane). No x402 payment.

revoke_session_signer

Instantly revoke a delegated session signer (non-custodial control plane).

Single atomic DB UPDATE -- the gate resolves the row fresh on every call with no cache, so this is enforced on the very next call using signer_pubkey. No TTL/cache window.

Param Type Required Default
signer_pubkey string yes

Fee: free (read-only / control-plane). No x402 payment.

set_agnta_grant

Opt a wallet into an AGNTA DelegationGrant spend/scope cap (non-custodial control plane).

Validates grant_pda decodes as a base58 32-byte address, the on-chain account exists and decodes as a DelegationGrant, it is not revoked and not expired, and its delegate matches wallet_address -- every failure raises INVALID_PARAMS with a distinct message. Adds an ADDITIONAL cap enforced alongside (never replacing) WalletPolicy on every subsequent value-bearing call for this wallet -- always TIGHTENS enforcement, so it applies directly for every wallet, Lane 2 included.

Permission mode: a configuration write -- allowed in every permission_mode, observe included; the ladder gates value-bearing actions, not config.

Param Type Required Default
wallet_address string yes
grant_pda string yes

Fee: free (read-only / control-plane). No x402 payment.

Opt in/out of the wake-on-condition worker.

Default OFF. When opted in, a triggered alert may run a metered background check (a fast triage model, escalating to a larger model only if worth a closer look) and propose one action. daily_wake_budget (default 10, 1-500) hard-caps metered wakes per day. The worker never executes -- every proposal is approved in your own wallet. See get_ooda_status for wake history including skipped wakes.

Usage-vs-fee-revenue kill threshold: wakes auto-suspend if inference spend over kill_window_days (default 30 days) exceeds kill_threshold_ratio (default "0.5") of attributed fee revenue. kill_threshold_enabled lets you disable the check for this wallet; kill_threshold_ratio is a decimal string. All three are optional -- omit to leave the existing/default value untouched. See get_ooda_status for whether/why a wallet was auto-killed (kill_switched_at, kill_reason).

Workflow: consent step -- run once (or to change budget/kill config) before wakes can fire; check get_ooda_status afterward to confirm state.

Permission mode: a configuration write -- allowed in every permission_mode, observe included; the ladder gates value-bearing actions, not config.

Param Type Required Default
wallet_address string yes
opted_in boolean yes
daily_wake_budget integer | null no
kill_threshold_enabled boolean | null no
kill_threshold_ratio string | null no
kill_window_days integer | null no

Fee: free (read-only / control-plane). No x402 payment.

set_permission_mode

Change an agent wallet's session permission mode (non-custodial control plane).

Ports Claude Code's plan/acceptEdits/bypassPermissions ladder to a wallet with signing power. mode: observe (deny every value-bearing tool outright, PERMISSION_MODE_BLOCKED) | propose (value-bearing tools return a PROPOSAL envelope -- proposal_id + params + summary -- instead of executing; approve within the TTL via approve_proposal) | auto_within_policy (execute immediately, still capped by every configured WalletPolicy -- the pre-R9 default). The transition is logged as an AgentTransaction audit row.

Scope: the ladder gates ACTIONS that build, sign or move value -- including set_perp_tpsl, which is an on-chain action despite its name. It does NOT gate configuration writes: set_wallet_policy, set_agnta_grant, set_alert, set_liquidation_alert, set_ooda_consent, set_portfolio_charter and this tool are allowed in every mode, observe included -- which is how a wallet leaves observe.

Param Type Required Default
wallet_address string yes
mode string yes

Fee: free (read-only / control-plane). No x402 payment.

set_portfolio_charter

Write a new version of the wallet's portfolio charter (free control-plane write).

Creates a new active version -- the prior version stays in history, never deleted (versioned mandate, not an in-place overwrite). risk_band is one of conservative|balanced|aggressive. banned_tokens merge into AgentWallet.evaluate_trade as an ADDITIONAL deny source alongside WalletPolicy.banned_tokens -- an active WalletPolicy always wins when it is the stricter rule; a charter can never loosen an existing policy, and a conflict comes back in the response's warnings (logged server-side, never silently dropped). target_allocations is {token: percent}, must sum to <=100. objectives/cadence are free-form parameters -- never phrase them as return promises (hard rules 5-8).

Setting an escalation_webhook mints a platform-generated escalation_webhook_secret used to HMAC-SHA256-sign every escalation POST (X-Crank-Signature over "{timestamp}.{body}"). The RAW secret is returned exactly once -- in this write's response -- so the receiver can be configured; every later read returns it masked. It is carried forward unchanged when the URL is unchanged, rotated automatically when the URL changes, and rotated on demand with rotate_escalation_secret=true. It is a receiver-authentication credential, never wallet key or seed material (hard rule 1).

Workflow: ORIENT step 0 -- set once at the start of a relationship with an agent/wallet; strategies read it on every execute_strategy tick (see get_trading_workflow).

Permission mode: a configuration write -- allowed in every permission_mode, observe included; the ladder gates value-bearing actions, not config.

Param Type Required Default
wallet_address string yes
body_markdown string no ""
risk_band string no ""
banned_tokens array | null no
target_allocations object | null no
max_position_pct any no
cadence string no ""
escalation_webhook string no ""
objectives string no ""
rotate_escalation_secret boolean no false

Fee: free (read-only / control-plane). No x402 payment.

share_journal_card

Status: Rolling out

Pre-filled post for a journal card, ready to publish (free read).

Returns the same card as get_journal_card plus a platform-shaped share payload: post text within the platform's character limit, the public card URL, and a compose-intent URL. platform is x | farcaster | generic.

The copy is about YOUR process -- what your agent decided, that the rationale was written down before the outcome, and that the record is checkable on-chain. It never states or implies a return.

THIS CALL PUBLISHES THE DECISION. Your journal is private by default; calling this marks THIS decision publicly readable at its card URL so the link in the post resolves for anyone (and for answer engines). Nothing else is published -- not your other decisions, not amounts, not your journal body unless include_rationale=true. Reviewing with get_journal_card publishes nothing.

Workflow: SHARE step -- get_journal_card to review, this to publish.

Param Type Required Default
wallet_address string yes
decision_id string yes
platform string no "x"
include_rationale boolean no false

Fee: free (read-only / control-plane). No x402 payment.

sidecar_health

Live reachability probe against the deployed execution sidecar.

Thin wrapper around sidecar_service.is_configured/healthcheck. Runs the probe from the SERVER's own network path, which a local curl $SIDECAR_URL/health cannot do: that only proves the caller's own shell can reach a sidecar, never whether the deployed mcp.crank.ing server can.

Unconfigured (SIDECAR_URL unset) raises a structured CONFIG_ERROR with NO network attempt -- feature-detected first via is_configured. Configured but unreachable returns an OK envelope with reachable: False -- distinct from "not configured" -- so a caller can tell "we never tried" apart from "we tried and it's down".

FREE read, never gated (never in x402 PAID_TOOLS): booleans/counts/hosts only, no secret ever leaves this tool -- presence-only, never config.SIDECAR_AUTH_TOKEN itself.

No parameters (besides caller_id).

Fee: free (read-only / control-plane). No x402 payment.

sr_backtest

Backtest a strategy with an S/R config block (read-only simulation).

Runs the existing backtest engine with strategy_type (default "support_resistance": bounce-long off detected support, exit on a support break or resistance-fail; on spot a SHORT signal is exit-to-flat) and merges the validated sr_config into params["sr"]. asset is a token mint; timeframe one of 1m/5m/15m/1h/4h/1d; start_date/end_date ISO-8601. Returns the standard performance metrics plus persisted SUPPORT_RESISTANCE signals carrying zone metadata. Read-only simulation -- no fee, no on-chain action, not financial advice (DYOR).

Workflow: SIMULATE step -- validate an S/R setup on history before risking capital; feeds get_risk_assessment -> sr_configure_strategy. See get_trading_workflow.

Param Type Required Default
asset string yes
timeframe string yes
start_date string yes
end_date string yes
sr_config object | null no
strategy_type string no "support_resistance"
params object | null no
initial_capital number no 10000.0
fee_bps integer no 75
slippage_model string no "fixed"
slippage_bps integer no 30
wallet_address string no ""

Fee: free (read-only / control-plane). No x402 payment.

sr_configure_strategy

Attach an S/R config block to YOUR OWN strategy (ownership-checked).

Persists an sr param block (SRConfig knobs: sensitivity, sources, lookback, swing_window, zone_width_bps, merge_tolerance_bps, min_touches, min_strength, max_zones_per_side, manual_levels, liquidity_weight_k) onto the caller's own strategy params. The strategy must belong to wallet_address -- configuring someone else's strategy is refused. Strategies without an sr block behave exactly as before (back-compat). User/agent-owned configuration only: you own and control the strategy; the platform never exercises discretion (DYOR). No key handling, no fee.

Workflow: DECIDE step -- after sr_detect_levels + sr_backtest confirm the level picture, store the tuned config on the strategy. See get_trading_workflow.

Param Type Required Default
strategy_id integer yes
wallet_address string yes
sr_config object yes

Fee: free (read-only / control-plane). No x402 payment.

sr_detect_levels

Multi-timeframe support/resistance zones + liquidity bands (read-only).

Detects S/R zones per timeframe from recent OHLCV (swing highs/lows, floor pivots, Fibonacci retracement, volume-profile clusters, optional manual levels), merges them across timeframes with a confluence multiplier, and weights zone strength by overlapping candle-volume liquidity-band depth. asset is a token mint; timeframes default ["1h","4h","1d"]; lookback candles per timeframe (capped at 500); sources subset of swing / pivot / fibonacci / volume_profile / price_impact / manual; sensitivity 0-1 (higher = more zones); zone_width_bps sets the band half-width; manual_levels adds caller-supplied override prices. Returns zones (supports / resistances / pivots with price, band, strength, touches, sources, timeframes) plus liquidity_bands. Computed reference levels only -- not financial advice, not a trade instruction (DYOR). No wallet, no fee, no on-chain action.

Workflow: INTELLIGENCE step -- the level picture behind sr_backtest + sr_configure_strategy; pair with get_indicators + detect_regime. See get_trading_workflow.

Param Type Required Default
asset string yes
timeframes array<string> | null no
lookback integer no 200
sources array<string> | null no
sensitivity number no 0.5
zone_width_bps integer no 20
manual_levels array<number> | null no

Fee: free (read-only / control-plane). No x402 payment.

strategy_composite_create

Create a composite strategy from a validated definition.

Same non-custodial create path as the other 16 strategy types: the wallet holds its own keys; a wallet without a Turnkey signer receives an unsigned transaction per tick for the owner to sign. mode defaults to LIVE (recorded on the config; a paper mode annotation is informational until the managed-signing epic lands). Recommended: run compose_strategy + backtest_strategy on the definition FIRST -- historical results are not predictive; DYOR.

Param Type Required Default
wallet_address string yes
definition object yes
interval_seconds integer no 300
mode string no "live"
risk object | null no

Fee: free (read-only / control-plane). No x402 payment.

submit_agnta_identity_registration

Submit the OWNER-SIGNED register_identity transaction and complete the binding.

Submits the transaction, then VERIFIES on chain before stamping anything: the account at identity_pda must be OWNED by the AGNTA agent-registry program, carry the AgentIdentity discriminator, AND carry this wallet's own authority pubkey. Only then does the wallet move pending -> registered. A signature string is never treated as proof, and an agent can never self-assert its own binding. A duplicate submit is not an error -- the on-chain check decides; when the account is not yet visible the wallet stays pending and the caller polls poll_agnta_identity_registration.

Non-custodial (hard rule 1): signed_transaction_base64 is the owner's PUBLIC signed artefact -- Crank never sees, stores or logs a key or seed.

Param Type Required Default
wallet_address string yes
identity_pda string yes
signed_transaction_base64 string yes

Fee: free (read-only / control-plane). No x402 payment.

suggest_parameter_adjustment

Historical parameter observations for one of YOUR strategies (free read).

Compares the strategy's realised outcomes against your other strategies of the same type that ran different parameter values, and returns the observed differences ranked by realised P&L -- historical performance data only, never advice, and nothing is changed by this call (PROPOSE flow: acting on an observation is your call via the strategy tools, where every policy/risk gate still applies).

Workflow: ORIENT -> DECIDE step -- review observations, then adjust via strategy tools if YOU decide to.

Param Type Required Default
wallet_address string yes
strategy_id integer yes

Fee: free (read-only / control-plane). No x402 payment.

unpublish_journal_card

Status: Rolling out

Withdraw a published journal card (free write).

Publishing a decision with share_journal_card is an explicit act by the owner; this is the equally explicit act of taking it back. After this call, the public card at its card_url and the OG-image asset both 404 immediately -- the row is private again, exactly as it was before the first publish.

Wallet-scoped like every other Layer 1 tool: you can only unpublish a decision your own wallet owns. Calling this on a decision that is already private (or was never published) is a safe no-op, not an error -- unpublished in the response tells you whether a withdrawal actually happened.

The cached OG image, if one was generated, is left on disk (not deleted) -- the public routes gate on publication state, not file presence, so the takedown is immediate either way, and a later re-publish of the same decision reuses the image instead of paying to regenerate it.

Workflow: the symmetric undo of share_journal_card.

Param Type Required Default
wallet_address string yes
decision_id string yes

Fee: free (read-only / control-plane). No x402 payment.

verify_transaction

Verify any prior transaction signature on demand (FREE read).

Post-trade verification (harness spec R13): awaits on-chain confirmation of tx_signature at commitment level (up to timeout_s) and, when a state hint is supplied, re-reads the relevant state to compare against what was expected:

  • mint (+ wallet_address): re-reads that SPL/SOL token balance.
  • market (+ wallet_address): re-reads the Drift perp position.
  • protocol (+ wallet_address, optional market / marginfi_account): re-reads the lending obligation health.

Returns {confirmed, slot, commitment, post_state, expected_vs_actual, retry_guidance}. confirmed is False (never True) on a timeout -- NEVER treat an unconfirmed/timed-out result as success; retry_guidance names the next step. Use this after signing + broadcasting a transaction yourself (place_perp_order, lend_deposit/borrow/repay, and every other unsigned-tx tool never broadcast server-side) to confirm it actually landed before treating the position/balance as changed.

Param Type Required Default
tx_signature string yes
wallet_address string no ""
mint string | null no
market string | null no
protocol string | null no
marginfi_account string | null no
commitment string no "confirmed"
timeout_s number no 30.0

Fee: free (read-only / control-plane). No x402 payment.

verify_treasury_settlement_status

On-chain proof the treasury actually received settled x402 USDC.

Wires services.x402_settlement.verify_treasury_settlement ( real on-chain proof: treasury USDC ATA balance read as the primary signal, plus settle-tx signature confirmation) up to an MCP tool -- the follow-up to which intentionally split the on-chain proof logic from this wiring to avoid file collisions across parallel sessions.

signatures is optional: when omitted, this tool pulls recent settled X402PaymentRecord.tx_signature values itself (via django_bridge.recent_x402_signatures, same window shape as reconcile_x402_settlement) over the last since_iso window (or all time), capped at signature_limit to bound RPC round trips -- so a caller does not have to hand-assemble signatures to get a real proof. Pass an explicit signatures list to check specific settle-tx hashes instead (bypasses the DB lookup entirely).

verified is True only when every checked signature confirms on-chain AND (if expected_usd is given) the treasury balance covers it -- see the service docstring for the full non-falsely-asserting contract. Raises CONFIG_ERROR if no treasury wallet is configured, UPSTREAM_ERROR (retryable) on an RPC failure -- never a silent verified=False.

FREE read (never gated, never in x402 PAID_TOOLS): public addresses/ signatures/balances only, never a key (hard rule 1).

Param Type Required Default
expected_usd string no ""
since_iso string no ""
signatures array<string> | null no
signature_limit integer no 25

Fee: free (read-only / control-plane). No x402 payment.