Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Crank Protocol

REMOTE · MCP.CRANK.ING · SCANNED SEP 21

Non-custodial DeFi tools for AI agents on Solana: swaps, perps, lending, staking, equities.

Available components

0 this week 77 Trust /100
Trust breakdown (7 categories)

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 Security63
Transport & Reachability100
Schema Quality & AI Usability72
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 38073 tokens (~202/item across 188 items; 188 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management92
  • Stability check failed: schema churn in the 30 days we've observed: 14 tool removals, 0 breaking changes, 0 auth/transport breaks, 18 additions. See how to fix → Fail
Tool Coverage71
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety98
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 9 of 10 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "unpublish_journal_card" implies "withdraw" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
  • An AI judge read all 188 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

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

# add to Claude Code
claude mcp add --transport http ing-crank-crank 'https://mcp.crank.ing/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "ing-crank-crank": {
      "url": "https://mcp.crank.ing/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "ing-crank-crank": {
      "type": "http",
      "url": "https://mcp.crank.ing/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.ing-crank-crank]
url = "https://mcp.crank.ing/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ing-crank-crank": {
      "type": "remote",
      "url": "https://mcp.crank.ing/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ing-crank-crank --url 'https://mcp.crank.ing/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  ing-crank-crank:
    url: "https://mcp.crank.ing/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "ing-crank-crank": {
      "Transport": "http",
      "Url": "https://mcp.crank.ing/mcp"
    }
  }
}
# add to Vellum
assistant mcp add ing-crank-crank -t streamable-http -u 'https://mcp.crank.ing/mcp'
// mcp.json
{
  "mcpServers": {
    "ing-crank-crank": {
      "type": "http",
      "url": "https://mcp.crank.ing/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

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.

  • 20 Sept 26 0
    • Tool “create_execution_intent” rewrote its description, which is the text the model reads security
    • Tool “get_quotes” 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
  • 8 Sept 26 0
    • Tool “set_portfolio_charter” rewrote its description, which is the text the model reads security
    • “set_portfolio_charter” added an optional parameter “rotate_escalation_secret” cosmetic
  • 7 Sept 26 0
    • New tool “evm_swap”, which the server declares destructive security
    • Tool “register_integrator” rewrote its description, which is the text the model reads security
    • Tool “sidecar_health” rewrote its description, which is the text the model reads security
    • New tool “evm_balances” functional
    • New tool “evm_swap_quote” functional
    • New tool “evm_token_price” functional
  • 3 Sept 26 0
    • Tool “authorize_session_signer” rewrote its description, which is the text the model reads security
    • Tool “request_session_signer_authorization” rewrote its description, which is the text the model reads security
  • 30 Aug 26 0
    • Tool “bridge_out” rewrote its description, which is the text the model reads security
    • Tool “search_tools” rewrote its description, which is the text the model reads security
    • New tool “get_bridge_status” functional
    • “bridge_out” added an optional parameter “order_id” cosmetic
  • 29 Aug 26 0
    • Tool “get_collective_insights” rewrote its description, which is the text the model reads security
    • Tool “get_emerging_patterns” rewrote its description, which is the text the model reads security
    • Tool “get_my_contribution_score” rewrote its description, which is the text the model reads security
    • Tool “get_signal_effectiveness” rewrote its description, which is the text the model reads security
    • Tool “get_source_weights” rewrote its description, which is the text the model reads security
    • Tool “get_strategy_evolution_report” rewrote its description, which is the text the model reads security
    • Tool “get_strategy_leaderboard” 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 “propose_template_update” rewrote its description, which is the text the model reads security
    • Tool “share_journal_card” rewrote its description, which is the text the model reads security
    • Tool “strategy_dca_create” rewrote its description, which is the text the model reads security
    • Destructive annotations: 8 of 9 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "unpublish_journal_card" implies "withdraw" and declares readOnlyHint instead, contradicting what its own name says it does. functional
    • New tool “report_registry_install” functional
    • New tool “unpublish_journal_card” functional
    • “pledge_to_ilo” added an optional parameter “disclosures_acknowledged” cosmetic
    • “pledge_to_ilo” added an optional parameter “ip” cosmetic
    • “pledge_to_ilo” added an optional parameter “jurisdiction” cosmetic
  • 26 Aug 26 +2
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Aug 26 0
    • New tool “intelligence_suggestion_approve”, which the server declares destructive security
    • New tool “get_journal_card” functional
    • New tool “share_journal_card” functional
Diagnostics

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 21 Sept 2026 · Probed https://mcp.crank.ing/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=mcp.crank.ing CN=YE2,O=Let's Encrypt,C=US 8 Aug 2026 6 Nov 2026 ECDSA 256 ECDSA-SHA384 6247a5e560270504cf8b0573a2963f401a8
SANs: mcp.crank.ing
CN=YE2,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 4df3b15dd6c0784c507cd37b58e6f115
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

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 No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=31536000; includeSubDomains; preload
x-content-type-options nosniff
x-frame-options DENY
referrer-policy no-referrer

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 Verified 200
http (plaintext) http://mcp.crank.ing/mcp HTTPS enforced 301 https://mcp.crank.ing/mcp
MCP tools · 188 exposed · ~38,073 tokens

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 →

Tool Tokens
approve_proposal ~143

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``.

NameTypeReqDescription
approved_bystring
caller_idstring
proposal_idstringyes

Structured output declared, but exposes no named fields.

No examples provided.

asset_classification ~162

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.

NameTypeReqDescription
caller_idstring
symbol
token_address

Structured output declared, but exposes no named fields.

No examples provided.

authorize_session_signer ~224

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).

NameTypeReqDescription
caller_idstring
capabilities
expires_atstring
labelstring
signer_pubkeystringyes
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

backtest_strategy ~449

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.

NameTypeReqDescription
assetstringyes
caller_idstring
definition
end_datestringyes
fee_bpsinteger
initial_capitalnumber
params
slippage_bpsinteger
slippage_modelstring
start_datestringyes
strategy_typestringyes
timeframestringyes
wallet_addressstring

Structured output declared, but exposes no named fields.

No examples provided.

bridge_in ~338

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.

NameTypeReqDescription
amountintegeryes
caller_idstring
dst_tokenstringyes
evm_senderstringyes
idempotency_keystring
pay_in_crankboolean
payment_headerstring
src_chainstringyes
src_tokenstringyes
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

bridge_out ~390

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).

NameTypeReqDescription
amountintegeryes
caller_idstring
dst_chainstringyes
dst_tokenstringyes
evm_recipientstringyes
idempotency_keystring
order_idstring
pay_in_crankboolean
payment_headerstring
signed_transaction
src_tokenstringyes
verifyboolean
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

bulk_send_social ~291

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.

NameTypeReqDescription
caller_idstring
idempotency_keystring
platformstring
recipientsarrayyes
referralstring
sender_walletstringyes
tokenstringyes

Structured output declared, but exposes no named fields.

No examples provided.

cancel_perp_order ~242

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.

NameTypeReqDescription
acknowledge_tier_bboolean
caller_idstring
idempotency_keystring
ipstring
jurisdiction
order_idstringyes
signed_transaction
venue
verifyboolean
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

check_claim_status ~144

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.

NameTypeReqDescription
caller_idstring
claim_id
recipientstring
sender_walletstring

Structured output declared, but exposes no named fields.

No examples provided.

claim_ilo_tokens ~226

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.

NameTypeReqDescription
caller_idstring
idempotency_keystring
launch_idintegeryes
pledger_token_accountstring
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

claim_status ~41

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

NameTypeReqDescription
caller_idstring
codestringyes

Structured output declared, but exposes no named fields.

No examples provided.

clear_agnta_grant ~120

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.

NameTypeReqDescription
caller_idstring
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

clone_strategy ~88

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.

NameTypeReqDescription
caller_idstring
template_idintegeryes
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

close_perp_position ~306

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.

NameTypeReqDescription
acknowledge_tier_bboolean
caller_idstring
close_pctnumber
idempotency_keystring
ipstring
jurisdiction
pay_in_crankboolean
payment_headerstring
position_idstringyes
signed_transaction
venue
verifyboolean
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

compose_strategy ~87

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).

NameTypeReqDescription
definitionobjectyes

Structured output declared, but exposes no named fields.

No examples provided.

create_agent_wallet ~148

Register an agent wallet the caller controls (non-custodial control plane). Creates an AgentWallet record keyed by agent_id and applies an optional default policy preset. default_policies: conservative | balanced | aggressive. wallet_address is the agent's PUBLIC key (caller-supplied); omit it to create a pending record the Turnkey provisioning ticket fills in. Returns wallet_address, agent_id, status, and the applied_policies.

NameTypeReqDescription
agent_idstringyes
caller_idstring
default_policiesstring
display_namestring
owner_addressstring
wallet_addressstring

Structured output declared, but exposes no named fields.

No examples provided.

create_execution_intent ~558

Create a propose-only execution intent; returns an approval URL to hand to the user. 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 (follow-up to ): 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.

NameTypeReqDescription
allow_unverifiedboolean
amountintegeryes
caller_idstring
idempotency_keystring
input_tokenstringyes
ipstring
jurisdiction
output_tokenstringyes
pay_in_crankboolean
slippage_bps
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

declare_jurisdiction ~285

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.

NameTypeReqDescription
caller_idstring
ipstring
jurisdictionstringyes
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

delete_webhook ~47

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

NameTypeReqDescription
caller_idstring
wallet_addressstringyes
webhook_idintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

detect_regime ~249

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.

NameTypeReqDescription
assetstringyes
caller_idstring
lookback_candlesinteger
timeframestring

Structured output declared, but exposes no named fields.

No examples provided.

discover_agents ~82

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.

NameTypeReqDescription
caller_idstring
capabilitystring
limitinteger

Structured output declared, but exposes no named fields.

No examples provided.

discover_strategies ~160

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.

NameTypeReqDescription
caller_idstring
detailstring
limitinteger
sortstring
strategy_typestring

Structured output declared, but exposes no named fields.

No examples provided.

enable_agent_wallet ~125

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".

NameTypeReqDescription
agent_idstringyes
caller_idstring
display_namestring

Structured output declared, but exposes no named fields.

No examples provided.

equity_corporate_events ~87

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.

NameTypeReqDescription
caller_idstring
symbolstringyes

Structured output declared, but exposes no named fields.

No examples provided.

equity_market_hours ~81

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.

NameTypeReqDescription
caller_idstring
symbol

Structured output declared, but exposes no named fields.

No examples provided.

equity_markets ~89

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.

NameTypeReqDescription
caller_idstring

Structured output declared, but exposes no named fields.

No examples provided.

equity_positions ~85

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).

NameTypeReqDescription
caller_idstring
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

equity_quote ~126

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.

NameTypeReqDescription
amountintegeryes
caller_idstring
sidestring
slippage_bpsinteger
symbolstringyes
venue_hint

Structured output declared, but exposes no named fields.

No examples provided.

evm_balances ~117

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.

NameTypeReqDescription
addressstringyes
caller_idstring
chainstring
token_addresses

Structured output declared, but exposes no named fields.

No examples provided.

evm_swap ~870

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 un…

NameTypeReqDescription
buy_tokenstringyes
caller_idstring
chainstring
expected_buy_amountstring
idempotency_keystring
pay_in_crankboolean
payment_headerstring
pre_buy_balancestring
replace_max_fee_per_gasstring
replace_max_priority_fee_per_gasstring
replace_noncestring
sell_amountstringyes
sell_tokenstringyes
signed_transactionstring
slippage_bps
takerstringyes
verifyboolean

Structured output declared, but exposes no named fields.

No examples provided.

evm_swap_quote ~118

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.

NameTypeReqDescription
buy_tokenstringyes
caller_idstring
chainstring
sell_amountstringyes
sell_tokenstringyes
takerstring

Structured output declared, but exposes no named fields.

No examples provided.

evm_token_price ~111

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.

NameTypeReqDescription
amountstring
caller_idstring
chainstring
quote_tokenstring
token_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

flash_loan ~220

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.

NameTypeReqDescription
allow_unverifiedboolean
amountintegeryes
caller_idstring
idempotency_keystring
instructionsarrayyes
marginfi_accountstringyes
pay_in_crankboolean
payment_headerstring
tokenstringyes
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

fund_wallet ~213

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.

NameTypeReqDescription
amount_usdnumberyes
caller_idstring
currencystring
idempotency_keystring
pay_in_crankboolean
payment_headerstring
payment_methodstring
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

get_agent_profile ~41

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

NameTypeReqDescription
caller_idstring
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

get_all_venues_status ~126

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.

NameTypeReqDescription
caller_idstring
detailstring

Structured output declared, but exposes no named fields.

No examples provided.

get_arb_discrepancies ~180

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.

NameTypeReqDescription
assets
caller_idstring
min_spread_bpsnumber
window_hoursinteger

Structured output declared, but exposes no named fields.

No examples provided.

get_balances ~118

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.

NameTypeReqDescription
caller_idstring
detailstring
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

get_bridge_quote ~169

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.

NameTypeReqDescription
amountintegeryes
caller_idstring
dst_chainstringyes
dst_tokenstringyes
src_chainstringyes
src_tokenstringyes

Structured output declared, but exposes no named fields.

No examples provided.

get_bridge_status ~134

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).

NameTypeReqDescription
caller_idstring
order_idstringyes

Structured output declared, but exposes no named fields.

No examples provided.

get_collective_insights ~213

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.

NameTypeReqDescription
assetstring
caller_idstring
detailstring
insight_typestring
strategy_typestring

Structured output declared, but exposes no named fields.

No examples provided.

get_consensus ~272

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.

NameTypeReqDescription
assetstringyes
caller_idstring
payment_headerstring
wallet_addressstring
window_hoursinteger

Structured output declared, but exposes no named fields.

No examples provided.

get_contrarian_signals ~224

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.

NameTypeReqDescription
assetstring
caller_idstring
payment_headerstring
wallet_addressstring
window_hoursinteger

Structured output declared, but exposes no named fields.

No examples provided.

get_crank_score ~148

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.

NameTypeReqDescription
caller_idstring
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

get_cross_exchange ~175

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.

NameTypeReqDescription
assetstringyes
caller_idstring
window_minutesinteger

Structured output declared, but exposes no named fields.

No examples provided.

get_disclaimers ~98

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.

NameTypeReqDescription
asset_classification
caller_idstring
symbol
token_address

Structured output declared, but exposes no named fields.

No examples provided.

get_emerging_patterns ~187

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.

NameTypeReqDescription
caller_idstring
limitinteger
min_agentsinteger

Structured output declared, but exposes no named fields.

No examples provided.

get_health_factor ~83

Liquidation-risk monitor for a lending position. Returns health_factor (>1 safe, <1 liquidatable), collateral value, debt value, liquidation threshold. protocol: kamino | marginfi.

NameTypeReqDescription
caller_idstring
marginfi_account
market
protocolstringyes
wallet_addressstringyes

Structured output declared, but exposes no named fields.

No examples provided.

get_ilo_adoption_status ~231

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. Informational readiness metric; not a promise of any launch, outcome or timeline.

NameTypeReqDescription
caller_idstring
clusterstring

Structured output declared, but exposes no named fields.

No examples provided.

get_ilo_details ~226

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.

NameTypeReqDescription
caller_idstring
caller_walletstring
launch_idintegeryes

Structured output declared, but exposes no named fields.

No examples provided.

Common questions

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 188 tools: jupiter_swap, verify_transaction, get_quotes, get_balances, portfolio_snapshot, and 183 more. Their descriptions and schemas cost roughly 38,073 tokens of context every time the server is loaded.

Does the Crank Protocol MCP server require authentication?

No. We connected to Crank Protocol without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Crank Protocol MCP server still maintained?

Crank Protocol is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.