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
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
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (jupiter_swap). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
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
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'
{
"mcpServers": {
"ing-crank-crank": {
"url": "https://mcp.crank.ing/mcp"
}
}
} {
"servers": {
"ing-crank-crank": {
"type": "http",
"url": "https://mcp.crank.ing/mcp"
}
}
} [mcp_servers.ing-crank-crank] url = "https://mcp.crank.ing/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"ing-crank-crank": {
"type": "remote",
"url": "https://mcp.crank.ing/mcp",
"enabled": true
}
}
} openclaw mcp add ing-crank-crank --url 'https://mcp.crank.ing/mcp' --transport streamable-http
mcp_servers:
ing-crank-crank:
url: "https://mcp.crank.ing/mcp" {
"McpServers": {
"ing-crank-crank": {
"Transport": "http",
"Url": "https://mcp.crank.ing/mcp"
}
}
} assistant mcp add ing-crank-crank -t streamable-http -u 'https://mcp.crank.ing/mcp'
{
"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.
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
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 |
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 →
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``.
| Name | Type | Req | Description |
|---|---|---|---|
| approved_by | string | – | – |
| caller_id | string | – | – |
| proposal_id | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| 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).
| 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.
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.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | yes | – |
| caller_id | string | – | – |
| definition | – | – | – |
| end_date | string | yes | – |
| fee_bps | integer | – | – |
| initial_capital | number | – | – |
| params | – | – | – |
| slippage_bps | integer | – | – |
| slippage_model | string | – | – |
| start_date | string | yes | – |
| strategy_type | string | yes | – |
| timeframe | string | yes | – |
| wallet_address | string | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | integer | yes | – |
| caller_id | string | – | – |
| dst_token | string | yes | – |
| evm_sender | string | yes | – |
| idempotency_key | string | – | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| src_chain | string | yes | – |
| src_token | string | yes | – |
| wallet_address | string | yes | – |
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).
| Name | Type | Req | Description |
|---|---|---|---|
| amount | integer | yes | – |
| caller_id | string | – | – |
| dst_chain | string | yes | – |
| dst_token | string | yes | – |
| evm_recipient | string | yes | – |
| idempotency_key | string | – | – |
| order_id | string | – | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| signed_transaction | – | – | – |
| src_token | string | yes | – |
| verify | boolean | – | – |
| wallet_address | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| idempotency_key | string | – | – |
| platform | string | – | – |
| recipients | array | yes | – |
| referral | string | – | – |
| sender_wallet | string | yes | – |
| token | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| acknowledge_tier_b | boolean | – | – |
| caller_id | string | – | – |
| idempotency_key | string | – | – |
| ip | string | – | – |
| jurisdiction | – | – | – |
| order_id | string | yes | – |
| signed_transaction | – | – | – |
| venue | – | – | – |
| verify | boolean | – | – |
| wallet_address | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| claim_id | – | – | – |
| recipient | string | – | – |
| sender_wallet | string | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| idempotency_key | string | – | – |
| launch_id | integer | yes | – |
| pledger_token_account | string | – | – |
| wallet_address | string | yes | – |
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).
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| code | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| wallet_address | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| template_id | integer | yes | – |
| wallet_address | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| acknowledge_tier_b | boolean | – | – |
| caller_id | string | – | – |
| close_pct | number | – | – |
| idempotency_key | string | – | – |
| ip | string | – | – |
| jurisdiction | – | – | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| position_id | string | yes | – |
| signed_transaction | – | – | – |
| venue | – | – | – |
| verify | boolean | – | – |
| wallet_address | string | yes | – |
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).
| Name | Type | Req | Description |
|---|---|---|---|
| definition | object | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| agent_id | string | yes | – |
| caller_id | string | – | – |
| default_policies | string | – | – |
| display_name | string | – | – |
| owner_address | string | – | – |
| wallet_address | string | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_unverified | boolean | – | – |
| amount | integer | yes | – |
| caller_id | string | – | – |
| idempotency_key | string | – | – |
| input_token | string | yes | – |
| ip | string | – | – |
| jurisdiction | – | – | – |
| output_token | string | yes | – |
| pay_in_crank | boolean | – | – |
| slippage_bps | – | – | – |
| wallet_address | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| ip | string | – | – |
| jurisdiction | string | yes | – |
| wallet_address | string | yes | – |
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).
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| wallet_address | string | yes | – |
| webhook_id | integer | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | yes | – |
| caller_id | string | – | – |
| lookback_candles | integer | – | – |
| timeframe | string | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| capability | string | – | – |
| limit | integer | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| detail | string | – | – |
| limit | integer | – | – |
| sort | string | – | – |
| strategy_type | string | – | – |
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".
| Name | Type | Req | Description |
|---|---|---|---|
| agent_id | string | yes | – |
| caller_id | string | – | – |
| display_name | string | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| symbol | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| 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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
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).
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| wallet_address | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | integer | yes | – |
| caller_id | string | – | – |
| side | string | – | – |
| slippage_bps | integer | – | – |
| symbol | string | yes | – |
| 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.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | – |
| caller_id | string | – | – |
| chain | string | – | – |
| 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…
| Name | Type | Req | Description |
|---|---|---|---|
| buy_token | string | yes | – |
| caller_id | string | – | – |
| chain | string | – | – |
| expected_buy_amount | string | – | – |
| idempotency_key | string | – | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| pre_buy_balance | string | – | – |
| replace_max_fee_per_gas | string | – | – |
| replace_max_priority_fee_per_gas | string | – | – |
| replace_nonce | string | – | – |
| sell_amount | string | yes | – |
| sell_token | string | yes | – |
| signed_transaction | string | – | – |
| slippage_bps | – | – | – |
| taker | string | yes | – |
| verify | boolean | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| buy_token | string | yes | – |
| caller_id | string | – | – |
| chain | string | – | – |
| sell_amount | string | yes | – |
| sell_token | string | yes | – |
| taker | string | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | string | – | – |
| caller_id | string | – | – |
| chain | string | – | – |
| quote_token | string | – | – |
| token_address | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_unverified | boolean | – | – |
| amount | integer | yes | – |
| caller_id | string | – | – |
| idempotency_key | string | – | – |
| instructions | array | yes | – |
| marginfi_account | string | yes | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| token | string | yes | – |
| wallet_address | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount_usd | number | yes | – |
| caller_id | string | – | – |
| currency | string | – | – |
| idempotency_key | string | – | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| payment_method | string | – | – |
| wallet_address | string | yes | – |
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).
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| wallet_address | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| detail | string | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| assets | – | – | – |
| caller_id | string | – | – |
| min_spread_bps | number | – | – |
| window_hours | integer | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| detail | string | – | – |
| wallet_address | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | integer | yes | – |
| caller_id | string | – | – |
| dst_chain | string | yes | – |
| dst_token | string | yes | – |
| src_chain | string | yes | – |
| src_token | string | yes | – |
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).
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| order_id | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | – | – |
| caller_id | string | – | – |
| detail | string | – | – |
| insight_type | string | – | – |
| strategy_type | string | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | yes | – |
| caller_id | string | – | – |
| payment_header | string | – | – |
| wallet_address | string | – | – |
| window_hours | integer | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | – | – |
| caller_id | string | – | – |
| payment_header | string | – | – |
| wallet_address | string | – | – |
| window_hours | integer | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| wallet_address | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | yes | – |
| caller_id | string | – | – |
| window_minutes | integer | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| asset_classification | – | – | – |
| caller_id | string | – | – |
| 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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| limit | integer | – | – |
| min_agents | integer | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| marginfi_account | – | – | – |
| market | – | – | – |
| protocol | string | yes | – |
| wallet_address | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| cluster | string | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| caller_wallet | string | – | – |
| launch_id | integer | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
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.