Crank Protocol
REMOTE · MCP.CRANK.ING
Non-custodial DeFi tools for AI agents on Solana: swaps, perps, lending, staking, equities.
Available components
Last scanned (14 hours ago)
Scores higher than 69% of remote servers
Unreachable for 1 day in a row. Last reached 4 Nov 2026.
Category Crypto and Web3
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security11
- TLS not yet verified: we couldn't open a connection to check the certificate. View diagnostics → Unverified
- Authorisation not yet verified: we couldn't confirm whether this endpoint requires it. View diagnostics → Unverified
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS not yet verified: we couldn't read the response headers to check for it. View diagnostics → Unverified
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability0
- Transport check failed: declared streamable-http, but we couldn't connect to verify it. See how to fix → View diagnostics → Fail
Schema Quality & AI Usability0
- Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.Unverified
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage0
- Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.Unverified
Tool Safety0
- Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.Unverified
Capabilities0
- Capabilities not yet verified: we couldn't read the endpoint's capabilities.Unverified
Unverified: 5 categories
Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 0
- Endpoint reachability: reachable → unreachable ▼ security
- Stability: fail → unverified ▼ security
- Authorization: fail → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- TLS certificate: pass → unverified ▼ security
- HSTS header: pass → unverified ▼ security
- Transport: pass → fail ▼ security
- Schema quality: 100 → unverified ▼ functional
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- 19 Oct 26 0
- Tool “get_my_contribution_score” rewrote its description, which is the text the model reads security
- 18 Oct 26 −1
- Stability: pass → fail ▼ security
- Tool “fund_wallet” was removed ▼ security
- Tool “get_onramp_status” was removed ▼ security
- Tool “offramp_to_fiat” was removed ▼ security
- Tool “declare_jurisdiction” rewrote its description, which is the text the model reads security
- Tool “perp_markets” rewrote its description, which is the text the model reads security
- Server version: 3.4.8 → 3.4.9 functional
- “declare_jurisdiction” added an optional parameter “accepted_terms” cosmetic
- “declare_jurisdiction” added an optional parameter “terms_version” cosmetic
- 16 Oct 26 0
- Tool “cancel_perp_order” rewrote its description, which is the text the model reads security
- Tool “close_perp_position” rewrote its description, which is the text the model reads security
- Tool “jupiter_swap” rewrote its description, which is the text the model reads security
- Tool “place_perp_order” rewrote its description, which is the text the model reads security
- Tool “pledge_to_ilo” rewrote its description, which is the text the model reads security
- Tool “set_permission_mode” rewrote its description, which is the text the model reads security
- Tool “set_perp_tpsl” rewrote its description, which is the text the model reads security
- New tool “poll_permission_mode_change” functional
- New tool “request_permission_mode_change” functional
- “cancel_perp_order” added an optional parameter “simulate” cosmetic
- “close_perp_position” added an optional parameter “simulate” cosmetic
- “jupiter_swap” added an optional parameter “simulate” cosmetic
- “place_perp_order” added an optional parameter “simulate” cosmetic
- “set_perp_tpsl” added an optional parameter “simulate” cosmetic
- 15 Oct 26 0
- New tool “get_rate_limits” functional
- 10 Oct 26 0
- Tool “create_agent_wallet” rewrote its description, which is the text the model reads security
- Tool “create_execution_intent” rewrote its description, which is the text the model reads security
- Tool “get_integrator_earnings” rewrote its description, which is the text the model reads security
- Tool “get_integrator_stats” rewrote its description, which is the text the model reads security
- Tool “jupiter_swap” rewrote its description, which is the text the model reads security
- Tool “register_counterparty_set” rewrote its description, which is the text the model reads security
- New tool “pause_wallet” functional
- New tool “resume_wallet” functional
- “create_agent_wallet” added an optional parameter “policy_preset” cosmetic
- “create_agent_wallet” added an optional parameter “unlimited” cosmetic
- “create_execution_intent” added an optional parameter “jito_tip_lamports” cosmetic
- “create_execution_intent” added an optional parameter “submit_mode” cosmetic
- “jupiter_swap” added an optional parameter “jito_tip_lamports” cosmetic
- “jupiter_swap” added an optional parameter “mev_fallback_public” cosmetic
- “jupiter_swap” added an optional parameter “submit_mode” cosmetic
- 2 Oct 26 0
- Tool “get_ilo_adoption_status” rewrote its description, which is the text the model reads security
- Tool “perp_positions_all” rewrote its description, which is the text the model reads security
- Tool “set_perp_tpsl” rewrote its description, which is the text the model reads security
- “set_perp_tpsl” added an optional parameter “cancel” cosmetic
- “set_perp_tpsl” added an optional parameter “request_id” cosmetic
- “set_perp_tpsl” added an optional parameter “trigger_price” cosmetic
- “set_perp_tpsl” made “position_id” optional cosmetic
- 1 Oct 26 0
- New tool “set_perp_tpsl”, which the server declares destructive security
- Tool “pledge_to_ilo” rewrote its description, which is the text the model reads security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://mcp.crank.ing/mcp
TLS unreached
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of mcp.crank.ing. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| ing. | present | 27256 | 8 | Verified |
| crank.ing. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Inconclusive
We could not reach the endpoint well enough to judge its authorisation posture.
| Result | Inconclusive |
|---|
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.crank.ing/mcp | Unreachable | ||
| http (plaintext) | http://mcp.crank.ing/mcp | HTTPS enforced |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
liquid_stake ~396
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.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_unverified | boolean | – | – |
| amount | integer | yes | – |
| caller_id | string | – | – |
| idempotency_key | string | – | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| protocol | string | yes | – |
| signed_transaction | – | – | – |
| verify | boolean | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
list_alerts ~178
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| include_triggered | boolean | – | – |
| limit | integer | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
list_session_signers ~41
List all delegated session signers (active + revoked) for a wallet.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
list_signal_catalog ~169
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| include_inactive | boolean | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
list_webhooks ~40
List a wallet's webhook subscriptions (free read; secrets are never returned).
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
lst_swap ~321
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.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_unverified | boolean | – | – |
| amount | integer | yes | – |
| caller_id | string | – | – |
| from_lst | string | yes | – |
| idempotency_key | string | – | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| signed_transaction | – | – | – |
| to_lst | string | yes | – |
| verify | boolean | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
pause_wallet ~87
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| reason | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
perp_close ~258
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| close_pct | number | – | – |
| idempotency_key | string | – | – |
| ip | string | – | – |
| jurisdiction | – | – | – |
| market | string | yes | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| position_id | – | – | – |
| signed_transaction | – | – | – |
| verify | boolean | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
perp_funding_rates ~68
Current funding for a perp market (rate, period, last funding timestamp). market e.g. SOL-PERP. period is informational (1h/8h/24h).
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| market | string | yes | – |
| period | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
perp_funding_rates_all ~42
Normalized funding/borrow rates across venues (venue=None aggregates).
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| market | – | – | – |
| venue | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
perp_markets ~65
Available perp markets with price, open interest, funding, max leverage. Legacy alias: while Drift is flagged off this returns the primary venue's markets (Jupiter Perps: SOL, ETH, BTC). Prefer perp_markets_all.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
perp_markets_all ~97
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| detail | string | – | – |
| venue | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
perp_modify ~233
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.
| Name | Type | Req | Description |
|---|---|---|---|
| add_collateral | – | – | – |
| caller_id | string | – | – |
| idempotency_key | string | – | – |
| ip | string | – | – |
| jurisdiction | – | – | – |
| new_leverage | – | – | – |
| new_sl | – | – | – |
| new_tp | – | – | – |
| order_id | integer | yes | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
perp_open_long ~517
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.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_unverified | boolean | – | – |
| caller_id | string | – | – |
| idempotency_key | string | – | – |
| ip | string | – | – |
| jurisdiction | – | – | – |
| leverage | number | yes | – |
| market | string | yes | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| signed_transaction | – | – | – |
| size_usd | number | yes | – |
| stop_loss_price | – | – | – |
| take_profit_price | – | – | – |
| verify | boolean | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
perp_open_short ~182
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.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_unverified | boolean | – | – |
| caller_id | string | – | – |
| idempotency_key | string | – | – |
| ip | string | – | – |
| jurisdiction | – | – | – |
| leverage | number | yes | – |
| market | string | yes | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| signed_transaction | – | – | – |
| size_usd | number | yes | – |
| stop_loss_price | – | – | – |
| take_profit_price | – | – | – |
| verify | boolean | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
perp_positions ~64
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
perp_positions_all ~160
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| detail | string | – | – |
| venue | – | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
place_perp_order ~976
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']`` --…
| Name | Type | Req | Description |
|---|---|---|---|
| acknowledge_tier_b | boolean | – | – |
| caller_id | string | – | – |
| idempotency_key | string | – | – |
| ip | string | – | – |
| jurisdiction | – | – | – |
| leverage | number | yes | – |
| limit_price | – | – | – |
| market | string | yes | – |
| order_type | – | – | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| side | string | yes | – |
| signed_transaction | – | – | – |
| simulate | – | – | – |
| size_usd | number | yes | – |
| stop_loss_price | – | – | – |
| take_profit_price | – | – | – |
| venue | – | – | – |
| venue_action | – | – | – |
| verify | boolean | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
pledge_to_ilo ~510
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): 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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | integer | yes | – |
| caller_id | string | – | – |
| confirm | boolean | – | – |
| disclosures_acknowledged | boolean | – | – |
| idempotency_key | string | – | – |
| ip | string | – | – |
| jurisdiction | string | – | – |
| launch_id | integer | yes | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| pledger_token_account | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
poll_agent_wallet_enable ~108
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| device_code | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
poll_agnta_grant_clear ~97
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| device_code | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
poll_agnta_identity_registration ~129
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| identity_pda | string | yes | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
poll_permission_mode_change ~90
Poll a permission-mode-loosening request; applies the mode ONLY once approved. Returns {"status": "pending"} while waiting, {"status": "expired"} for an unknown/expired code (never fabricates approval), or on approval applies through the same rails set_permission_mode uses for a direct change.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| device_code | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
poll_session_signer_authorization ~97
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| device_code | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
poll_wallet_policy_loosening ~60
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| device_code | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
portfolio_snapshot ~156
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| detail | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
propose_allocation ~205
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.
| Name | Type | Req | Description |
|---|---|---|---|
| assets | – | – | – |
| caller_id | string | – | – |
| intent | string | – | – |
| timeframe | string | – | – |
| wallet_address | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
propose_template_update ~188
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| description | string | – | – |
| name | string | – | – |
| pattern_id | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
publish_strategy ~165
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.
| Name | Type | Req | Description |
|---|---|---|---|
| anonymous | boolean | – | – |
| author_wallet_address | string | – | – |
| backtest_run_id | – | – | – |
| caller_id | string | – | – |
| config_template | object | yes | – |
| description | string | – | – |
| name | string | yes | – |
| performance_summary | – | – | – |
| strategy_type | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
register_agent ~183
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.
| Name | Type | Req | Description |
|---|---|---|---|
| a2a_card_url | string | – | – |
| caller_id | string | – | – |
| capabilities | – | – | – |
| contact | string | – | – |
| description | string | – | – |
| display_name | string | – | – |
| mcp_endpoint | string | – | – |
| supported_protocols | – | – | – |
| version | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
register_counterparty_set ~316
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| expected_root | string | – | – |
| members | array | yes | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
register_integrator ~108
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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent_id | string | – | – |
| caller_id | string | – | – |
| contact_email | string | – | – |
| name | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
register_referrer ~80
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| integrator_wallet_address | string | yes | – |
| referred_wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
register_webhook ~215
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| event_types | array | yes | – |
| secret | string | yes | – |
| url | string | yes | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
report_registry_install ~133
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).
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
request_agnta_grant_clear ~115
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
request_agnta_identity_registration ~162
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
request_permission_mode_change ~148
Open the browser-confirmation handshake to loosen a Lane 2 wallet's permission mode. Call this when set_permission_mode refuses with BROWSER_CONFIRMATION_REQUIRED. Does NOT change the mode -- 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_permission_mode_change(device_code) once approved. Refused upfront for a change that needs no confirmation (invalid mode, non-Lane-2 wallet, or a tightening -- call set_permission_mode directly for those).
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| mode | string | yes | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
request_session_signer_authorization ~147
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| capabilities | – | – | – |
| expires_at | string | – | – |
| label | string | – | – |
| signer_pubkey | string | yes | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
request_wallet_policy_loosening ~101
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| policies | array | yes | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
resume_wallet ~110
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| reason | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
revoke_session_signer ~83
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| signer_pubkey | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
search_tools ~271
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| limit | integer | – | – |
| query | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
send_token_social ~301
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.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_unverified | boolean | – | – |
| amount | integer | yes | – |
| caller_id | string | – | – |
| expiry_days | – | – | – |
| idempotency_key | string | – | – |
| platform | string | – | – |
| recipient_handle | string | yes | – |
| referral | string | – | – |
| sender_wallet | string | yes | – |
| token | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
set_agnta_grant ~193
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| grant_pda | string | yes | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
set_alert ~183
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.
| Name | Type | Req | Description |
|---|---|---|---|
| alert_type | string | yes | – |
| caller_id | string | – | – |
| threshold | number | yes | – |
| token | string | yes | – |
| wallet_address | string | yes | – |
| webhook_url | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
set_liquidation_alert ~210
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| marginfi_account | – | – | – |
| market | – | – | – |
| protocol | string | yes | – |
| threshold | number | yes | – |
| wallet_address | string | yes | – |
| webhook_url | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
set_ooda_consent ~331
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| daily_wake_budget | – | – | – |
| kill_threshold_enabled | – | – | – |
| kill_threshold_ratio | – | – | – |
| kill_window_days | – | – | – |
| opted_in | boolean | yes | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
set_permission_mode ~330
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. Lane 2 loosening gate: on a Lane 2 wallet, a change that LOOSENS the ladder (observe -> propose/auto, propose -> auto) raises BROWSER_CONFIRMATION_REQUIRED -- call request_permission_mode_change instead and have the owner approve it in their browser. Tightening applies directly for every wallet; non-Lane-2 wallets are unchanged.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| mode | string | yes | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
set_perp_tpsl ~727
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 obs…
| Name | Type | Req | Description |
|---|---|---|---|
| acknowledge_tier_b | boolean | – | – |
| caller_id | string | – | – |
| cancel | boolean | – | – |
| idempotency_key | string | – | – |
| ip | string | – | – |
| jurisdiction | – | – | – |
| position_id | string | – | – |
| request_id | – | – | – |
| signed_transaction | – | – | – |
| simulate | – | – | – |
| size_pct | number | – | – |
| stop_loss_price | – | – | – |
| take_profit_price | – | – | – |
| trigger_price | – | – | – |
| venue | – | – | – |
| venue_action | – | – | – |
| verify | boolean | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
How do I install the Crank Protocol MCP server?
Crank Protocol is a hosted endpoint at https://mcp.crank.ing/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · mcp.crank.ing
claude mcp add --transport http ing-crank-crank 'https://mcp.crank.ing/mcp'
What is the Crank Protocol MCP server?
Crank Protocol is an MCP server listed in the public MCP registry as ing.crank/crank. Non-custodial DeFi tools for AI agents on Solana: swaps, perps, lending, staking, equities. This page covers its hosted endpoint (https://mcp.crank.ing/mcp).
Is the Crank Protocol MCP server safe to use?
Crank Protocol scores 77 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Crank Protocol MCP server expose?
Crank Protocol exposes 196 tools: jupiter_swap, verify_transaction, get_quotes, get_balances, portfolio_snapshot, and 191 more. Their descriptions and schemas cost roughly 41,788 tokens of context every time the server is loaded.
Does the Crank Protocol MCP server require authentication?
Its publisher declares no required credentials for Crank Protocol. We have not been able to confirm that against the live endpoint, and a server can require authorisation without declaring it here.
Is the Crank Protocol MCP server still maintained?
Crank Protocol is still listed in the MCP registry, though our most recent checks did not reach this channel. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.