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 →
get_indicators ~329
Full standard technical-indicator set for one asset/timeframe (read-only). Computes sma, ema, macd, adx (+DI/-DI), rsi, stochastic (%K/%D), roc, bollinger (mid/upper/lower/width/%B), atr, keltner, realised_vol, vwap, volume_ratio and volume_profile (POC / value area / high-volume-node liquidity bands with 0-1 depth scores) from recent OHLCV via the canonical backend/indicators library. asset is a token mint; timeframe one of 1m/5m/15m/1h/4h/1d; indicators selects a subset (empty = all); lookback candles capped at 500; params overrides per indicator, e.g. {"rsi": {"period": 21}}; include_series=true adds per-bar series (last 200 points). Readings are None while history is warming up. Computed readings only -- not financial advice, not a trade instruction (DYOR). No wallet, no fee, no on-chain action. Workflow: INTELLIGENCE step -- raw indicator readings underlying detect_regime; pair with get_ml_signal (forecast) + get_signals (persisted cross-source signals). See get_trading_workflow.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | yes | – |
| caller_id | string | – | – |
| include_series | boolean | – | – |
| indicators | – | – | – |
| lookback | integer | – | – |
| params | – | – | – |
| timeframe | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_integrator_earnings ~53
Per-action + per-month integrator earnings (onboarding API). Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| integrator_wallet_address | string | yes | – |
| limit | integer | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_integrator_stats ~78
Integrator dashboard: status, share, onboarded count, earnings breakdown. Read-only. Every figure is fee-share USD (technology service fees the onboarded agents paid), never PnL -- a fee-share, never a performance-share.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| integrator_wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_intent_status ~124
Read the persisted lifecycle state of an execution intent (free read). Returns the server-persisted state only -- CREATED, APPROVED, SUBMITTED, UNKNOWN, CONFIRMED, FAILED, or EXPIRED -- plus the simulation summary and the on-chain signature once submitted. Never infers: UNKNOWN means an unresolved send (may have landed); only CONFIRMED is a verified on-chain success (fail-closed reporting, docs/CRANK_PLUGIN_SPEC.md section 6).
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| intent_id | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_journal_card ~288
Build the shareable journal card for one of YOUR decisions (free read). Every trading claim online is an unverifiable screenshot. This one is not: the card carries what you decided, the process you followed, what the record shows happened, and a public explorer link to the on-chain transaction so anyone can check it without a Crank account. It also carries a schema.org JSON-LD node so the public card page is citable by answer engines. The card is a CRAFT record -- decision type, whether an expectation was stated up front, which outcome horizons were recorded, whether the stated expectation and the record line up, how confidently the record attributes to on-chain fills. It deliberately carries no amounts and no percentages: it is a record of process, not a claim about results. ``include_rationale`` (default false) opts your own journal rationale and intended action into the public card. Your journal body is private to your wallet, so publishing any of it is always an explicit act. Workflow: after journal_append / journal_query -- pick a decision you want to show, then share_journal_card to get the pre-filled post.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| decision_id | string | yes | – |
| include_rationale | boolean | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_leaderboard ~153
Top published strategies ranked by a verified backtest metric (free). Crypto-only -- equity templates excluded. sort in sharpe|return| sortino|win_rate|drawdown|clones (default sharpe). Each entry carries factual backtest metrics + the on-chain attestation hash; no return promises (rule 8). detail="concise" (default) trims each entry the same way as discover_strategies (template_id is the ID to chain into clone_strategy); "full" returns every field.
| 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.
get_lending_rates ~138
Compare supply/borrow rates across Kamino + Marginfi. Each row: protocol, token mint, symbol, supply/borrow APY %, TVL USD, utilization. detail="concise" (default) drops tvl_usd/utilization (token is the ID to chain into lend_deposit); "full" returns every field. Workflow: YIELDS step -- the passive-return option for idle/low-conviction capital (lending USDC removes price exposure). Pairs with get_lst_yields. See get_trading_workflow.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| detail | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_lst_yields ~95
Compare APY across LST providers (Marinade/Jito/Blaze) with MEV-boost + validator-count descriptors. Workflow: YIELDS step -- staking keeps SOL exposure + earns yield (vs lending, which removes price exposure). Best APY becomes the 'park it' leg of the allocation; execute via liquid_stake. See get_trading_workflow.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_market_briefing ~411
Crypto market briefing synthesised from free public sources (tiered). Returns a market briefing aggregated from free crypto data sources (Coin Bureau, DeFiLlama, the alternative.me Fear & Greed index) plus classified sentiment signals: market summary, top movers / most-discussed assets, sentiment regime, the Fear & Greed reading, and source attribution. assets is an optional list of tickers (e.g. ["BTC","SOL"]); for paid tiers it declares the agent's holdings and focuses the synthesis. detail_level: "free" returns the pre-generated daily Free briefing (metered at $0, quota'd per day); "pro" ($0.25) and "platinum" ($0.50) return real-time Sonnet/Opus synthesis personalised to the wallet's portfolio + active strategies. Paid tiers are covered by an active $CRANK-staker subscription or require a verified x402 payment_header (PAYMENT_REQUIRED otherwise). The billing outcome is in the response ``billing`` field. Not financial advice. ``detail`` (payload shape -- NOT the pricing tier, that's ``detail_level`` above): "concise" (default) drops the long ``content`` body + ``model_used``/``source_count``, keeping the summary, sentiment regime, Fear & Greed reading, covered assets, and ``strategy_connections`` (IDs for chaining into a strategy tool) plus the ``billing`` outcome; "full" returns every field exactly as before, including ``content``. Workflow: INTELLIGENCE step (usually first) -- macro/sentiment context that frames detect_regime + the allocation. See get_trading_workflow.
| Name | Type | Req | Description |
|---|---|---|---|
| assets | – | – | – |
| caller_id | string | – | – |
| detail | string | – | – |
| detail_level | string | – | – |
| payment_header | string | – | – |
| timeframe | string | – | – |
| wallet_address | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_market_regime ~132
Market-wide regime from the persisted regime/macro signal feed (free read). Returns the dominant regime, its confidence, a distribution across observed regimes, and the contributing signals. For a live per-asset regime computed from OHLCV, use ``detect_regime`` instead. Descriptive observed data only. Not financial advice. Workflow: INTELLIGENCE step -- market-wide posture check before choosing a strategy type or direction_mode; pair with detect_regime for the asset leg.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| limit | integer | – | – |
| window_hours | integer | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_ml_signal ~290
ML ensemble directional forecast for a Solana asset (read-only). Trains the ported Bybit ensemble (XGBoost + RandomForest + NeuralNet + GradientBoost + a candle flow proxy) walk-forward on the last lookback_candles of OHLCV, then returns the blended P(up move) for the latest candle: score in [0,1], confidence (distance from 0.5), direction (long/short/neutral via buy_threshold/sell_threshold), per-model contributions and top feature importances. asset is a token mint; timeframe one of 1m/5m/15m/1h/4h/1d; horizon is the forward-return label horizon in candles. On spot, 'short' = exit-to-flat (no native short). Heuristic forecast from price history only -- not financial advice. No wallet, no fee, no on-chain action. Workflow: INTELLIGENCE step -- a directional forecast that complements detect_regime; low confidence -> cut size or stay flat. See get_trading_workflow.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | yes | – |
| buy_threshold | number | – | – |
| caller_id | string | – | – |
| horizon | integer | – | – |
| lookback_candles | integer | – | – |
| sell_threshold | number | – | – |
| timeframe | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_contribution_score ~222
Your own hive contribution score for a monthly epoch (free read). Wallet-scoped -- returns ONLY your wallet's own row, never another wallet's score and never a fleet ranking. ``epoch`` is "YYYY-MM" and defaults to the most recently completed month. Contribution quality reflects how much your journaled decisions genuinely improved the collective intelligence pool: accurate, verifiable, original contributions score well; copies and noise do not. ``flags`` explains a zero score, e.g. below the activation threshold or no on-chain-verified outcome. Any recognition of contribution quality from the Community Rewards Pool is discretionary, retroactive and effort-gated -- never a yield, a return, an earn-rate, or a promise of a future allocation. Workflow: REVIEW step -- read alongside get_my_performance to see how your journalling habits, not just your P&L, land with the network.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| epoch | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_performance ~152
Your own realised performance, grouped (free read). Aggregates your journaled non-paper outcomes: win rate, total/average realised P&L (USD), and technology-service-fee drag, grouped by strategy_type | asset | decision_type | hour_of_day over window_hours. Includes a calibration score (your stated expectations vs the realised 24h move) when you journal expectations. Historical performance data about your own decisions -- descriptive only, not a recommendation. Workflow: ORIENT step -- read this before sizing or creating strategies.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| group_by | string | – | – |
| wallet_address | string | yes | – |
| window_hours | integer | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_my_pledge_status ~146
Read your own on-chain Pledge record for a launch (free). Returns how much this wallet has pledged, its share of the raise, its remaining headroom under the per-wallet cap, the projected pro-rata allocation, how much the liquidity release schedule has unlocked vs already released, and whether an on-chain refund is available (refunds open only if the raise FAILS its minimum). Workflow: MONITOR step -- poll this between the cliff and full release to decide when a claim_ilo_tokens call is worth making.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| launch_id | integer | yes | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_onramp_status ~61
Check a pending MoonPay purchase by session_id. Returns status (pending/processing/completed/failed), amount_crypto, and the on-chain tx_signature once settled.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| session_id | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_ooda_status ~183
Wake-on-condition consent + usage status. Returns opted_in, daily_wake_budget, wakes_used_today, skips_today, and recent_wakes -- including SKIPPED_BUDGET / SKIPPED_SPEND_CAP rows, so a skipped wake is exactly as visible as a completed one, never silent. Also returns the usage-vs-fee-revenue kill threshold config and state: kill_threshold_enabled, kill_threshold_ratio, kill_window_days, and -- if this wallet was auto-killed -- kill_switched_at and kill_reason, so a wallet can see why wakes stopped. Workflow: status/observe step -- check this to see whether the background worker is watching, and what it did (or skipped) recently.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| recent_limit | integer | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_portfolio_charter ~181
Read the wallet's active portfolio charter -- the CRANK.md-equivalent mandate (free read). A user-authored document declaring objectives, risk_band, banned tokens, target_allocations, max_position_pct, rebalance cadence, and an escalation webhook -- loaded once per session so the mandate persists across every downstream call instead of being re-supplied ad hoc. has_charter is False when the wallet has not set one yet -- call set_portfolio_charter to create it. Descriptive framing only ("objectives"/"parameters", never return targets, hard rules 5-8). Workflow: ORIENT step 0 -- read this FIRST, before get_balances / portfolio_snapshot, so every downstream decision is framed by it.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_quests ~109
Live Crank Score quests + a wallet's progress (FREE read). Time-bounded, admin-configured campaigns (e.g. "Trade $1000 this week = 500 pts"). Each quest carries its tracked costly metric, target_value, reward_points, the active window, and -- when ``wallet_address`` is given -- the wallet's progress_value + completion state. Carries the ``disclaimer``.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| wallet_address | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_quotes ~238
Read-only Jupiter quote for a token pair (no execution). amount is in base units of input_token. Returns routes, price impact, fees, and estimated output. ``venue_hint`` is ADVISORY, never required -- see jupiter_swap. Pass ``wallet_address`` (optional) to preview the DISCOUNTED technology service fee that wallet will actually pay -- its volume tier plus $CRANK staker / ``pay_in_crank`` / Crank Score discounts. Omit it for the base rate. This stays a free read either way. slippage_bps omitted (None) resolves to the published platform default of 50 bps -- unchanged from before; the returned envelope's slippage.applied_source honestly reports "platform_default" in that case rather than falsely claiming "caller".
| Name | Type | Req | Description |
|---|---|---|---|
| amount | integer | yes | – |
| caller_id | string | – | – |
| input_token | string | yes | – |
| output_token | string | yes | – |
| pay_in_crank | boolean | – | – |
| slippage_bps | – | – | – |
| venue_hint | – | – | – |
| wallet_address | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_regulatory_updates ~267
Recent regulatory statements affecting Crank's scope (free read). Returns SEC / CFTC / FinCEN press releases and rule proposals from a scheduled daily scan, LLM-classified for relevance to Crank: DeFi, crypto perps, tokenized equities, autonomous agent trading, and non-custodial custody. Each update carries the issuing ``agency``, title, url, ``relevance`` (high/medium/low) + score, matched ``topics``, and a one-line factual ``summary``; results are ranked by relevance then recency. window_hours bounds the lookback (default 168 = 7 days, capped at 720 = 30 days); min_relevance filters by floor (high/medium/low); agency optionally narrows to one body (SEC, CFTC, FinCEN). Relevance is a compliance-triage signal, not legal advice. Not financial advice. Workflow: INTELLIGENCE / COMPLIANCE step -- check the current regulatory posture around perps, tokenized equities, or agent trading before acting on a strategy.
| Name | Type | Req | Description |
|---|---|---|---|
| agency | string | – | – |
| caller_id | string | – | – |
| min_relevance | string | – | – |
| window_hours | integer | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_risk_assessment ~303
Combined regime + risk-guard calculation for a strategy on an asset (read-only). Folds the detected market regime together with the safe-default risk guards (position / exposure / single-loss / drawdown / daily-loss limits) into one deterministic output: a rules-based direction, a conviction-weighted position size already capped to the position guard (in both percent-of-equity and USD notional against ``equity``), a per-regime action note, and the full guard set. strategy_type is one of the 16 Crank strategy types; asset is a token mint; timeframe one of 1m/5m/15m/1h/4h/1d. A mechanical, non-personalised calculation you choose whether to act on (DYOR) -- not financial advice, not a recommendation, and not a managed account. No wallet, no fee. Workflow: RISK step -- after backtest_strategy, before execution. The returned suggested_size_usd caps the order in the execute phase; do NOT exceed it. Check asset_classification first (equity -> per-execution confirm). See get_trading_workflow.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | yes | – |
| caller_id | string | – | – |
| equity | number | – | – |
| lookback_candles | integer | – | – |
| strategy_type | string | yes | – |
| timeframe | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_score ~155
User-facing Crank Score: rank, multiplier, metrics + quests (FREE). The campaign-layer view on top of ``get_crank_score``. Returns total_score, leaderboard rank + percentile, the applied multiplier_bps (streak / early-adopter / strategy-creator), the wallet's costly-action ``metrics`` (fee_volume_usd, strategies_published, clones_spawned, referrals_activated, active_days), and its live ``quests`` with progress. Points come ONLY from costly actions (anti-farm). ``disclaimer``: score MAY inform a future token distribution -- no fixed conversion ratio, no entitlement.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_score_leaderboard ~114
Top-N Crank Score leaderboard (FREE read). Ranked descending by total_score. ``limit`` caps at the admin-configured leaderboard_size. Each entry: rank, wallet_address, total_score, the base/action/quest components, multiplier_bps, streak_days, percentile. Also returns total_participants and the pre-token ``disclaimer``. (Distinct from ``get_leaderboard``, which ranks strategy templates.)
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| limit | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_signal_effectiveness ~184
Fleet action-conditioned signal effectiveness (free read). Filters: source_type (e.g. youtube/rss/api/on_chain), signal_type, window (24h|7d|30d|90d|all). Returns, per matching signal_effectiveness collective insight, the fleet action taken, effect_size, confidence interval, contributing-agent count n, crowding_index, and staleness. Historical collective performance data aggregated across the fleet -- descriptive only, never a recommendation or a promise of results. Workflow: INTELLIGENCE step -- weigh a signal by how the FLEET's actions on it have historically resolved, alongside your own get_source_accuracy / get_my_performance track record.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| signal_type | string | – | – |
| source_type | string | – | – |
| window | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_signals ~242
Filtered, most-recent-first feed of structured market signals (free read). The observed-signal data spine: squeeze / flow / technical / microstructure / behavioral / liquidity / safety / whale / regime / macro / oracle / event / composite signals persisted by the collectors. ``subject`` matches a token symbol/market or its stable ref (mint / market address); ``signal_type`` / ``tier`` (a|b|c) / ``risk_level`` (none..critical) / ``min_score`` narrow the feed. Unknown filter values are dropped, not errored. Descriptive observed data only -- never a trade instruction. Not financial advice. Workflow: INTELLIGENCE step -- pair with get_market_briefing (macro) and get_token_risk_assessment (per-token safety roll-up) before sizing.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| include_expired | boolean | – | – |
| limit | integer | – | – |
| min_score | – | – | – |
| risk_level | string | – | – |
| signal_type | string | – | – |
| subject | string | – | – |
| tier | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_social_sends ~42
A wallet's social token sends (newest first; no claim-code secrets).
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_source_accuracy ~247
Historical directional hit-rate of each intelligence source (free read). Returns per-source accuracy stats for the intelligence signal sources (Coin Bureau / YouTube, RSS, Fear & Greed API, on-chain), so an agent can weight a source's calls by how often its bullish/bearish reads have played out. Each source carries a ``windows`` map over rolling 7d/30d/90d periods, each with total resolved calls, correct/incorrect counts, and accuracy_pct; sources with no resolved calls yet are omitted, and results are ranked by longest-window accuracy. windows optionally narrows the periods (subset of [7,30,90]); source_type optionally filters by source kind (youtube, rss, api, on_chain). Accuracy = the directional call vs the realised Birdeye price over the prediction window. Past accuracy is not a guarantee. Not financial advice. Workflow: INTELLIGENCE step -- pair with get_market_briefing to discount or trust a signal by its source's track record before sizing a position.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| source_type | string | – | – |
| windows | – | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_source_weights ~136
Source-effectiveness weight table (free read). Per (source, signal_type, regime): graded evaluation counts, the smoothed effectiveness weight (social sources hold a low prior until sufficiently graded -- the anti-gaming cold start), the fleet Layer-2 multiplier from released anonymized fleet insights, and the combined weighted value the composite effectiveness_weighted transform consumes. Historical grading statistics only -- descriptive, never advice. Not financial advice. Workflow: COMPOSE step -- read alongside list_signal_catalog to pick streams with a real graded track record before authoring a definition.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_strategy_evolution_report ~183
Clone-marketplace live performance deltas + approvals (free read). Per published template: its live clone-fleet performance payload (average profit and loss in bps across distinct cloning wallets over the trailing 30 days, anonymized, self-clones excluded), the change vs the previous refresh, and the approval trail for templates that came through the propose-and-approve governance path. A template without enough live clone history reports available=false with a reason -- never a number computed from too few wallets. Draft proposals are never included. Historical data only -- descriptive, never a recommendation or a promise of results. Workflow: INTELLIGENCE step -- compare marketplace templates on OBSERVED live clone history before cloning one via clone_strategy.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| limit | integer | – | – |
| strategy_type | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_strategy_leaderboard ~167
Anonymized fleet strategy-parameter leaderboard (free read). Ranks param_performance collective insights by effect_size within window (24h|7d|30d|90d|all). NEVER identifies a wallet or cohort -- rankings are anonymized param-bucket aggregates only, and any bucket without broad enough backing across the fleet is dropped before it ever reaches this response. Historical collective performance data -- descriptive only, never a recommendation or a promise of results. Workflow: INTELLIGENCE step -- compare a strategy_type's own parameter choices against fleet-wide observed outcomes before adjusting via suggest_parameter_adjustment / the strategy tools.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| strategy_type | string | – | – |
| window | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_strategy_suggestions ~204
Signal-to-action suggestions from the synthesis engine (free read, G4). Per-asset directional observations aggregated hourly from the accuracy- weighted intelligence consensus (get_consensus math) plus the Fear & Greed context, each carrying a ready-to-use strategy config. PROPOSE flow: this tool never executes anything -- act on a suggestion by creating the strategy through the normal strategy tools (your wallet policy and the engine's risk / conflict / guardrail gates still apply), or approve it in the app. ``status`` filters proposed|approved|dismissed|executed|expired|all. Informational descriptions of observed data only. Not financial advice. Workflow: INTELLIGENCE -> DECIDE step -- review suggestions, then pair with backtest_strategy + get_risk_assessment before any create call.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | – | – |
| caller_id | string | – | – |
| limit | integer | – | – |
| status | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_technology_updates ~310
Recent technology / tooling developments relevant to Crank + Engaij (free read). Returns items from a scheduled scan of technology feeds (Anthropic, OpenAI, Coinbase Developer, Solana Foundation, Hacker News filtered, GitHub trending) plus flagged YouTube tech channels (full transcript ingested), LLM-classified for relevance to both Crank (Solana trading infra + DeFi frontend) and Engaij (the parent automation platform). Each update carries ``category`` (sdk_release / api_change / competitor / regulatory / research / tooling), ``relevance_to_crank`` and ``relevance_to_engaij`` (high/medium/low/none), a concrete ``application_recommendation`` (what to do about it), title, url, and a one-line ``summary``; results are ranked by relevance then recency. window_hours bounds the lookback (default 168 = 7 days, capped at 720 = 30 days); min_relevance filters by floor (high/medium/low); category optionally narrows to one kind. A triage signal, not advice. Not financial advice. Workflow: INTELLIGENCE step -- scan for SDK / API releases, competitor moves, or tooling worth adopting before planning integration or strategy work.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| category | string | – | – |
| min_relevance | string | – | – |
| window_hours | integer | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_token_classification ~159
Standardised tokenized-stock classification for a mint or symbol. Read-only. Returns every classification dimension -- backing_status (fully/treasury backed, synthetic, unknown), liquidity_tier (tier_1/2/3 / illiquid, from Jupiter price impact), issuer_verified (Metaplex authority match), market_data_quality (live/stale/none) -- plus the derived composite risk (low/medium/high/blocked) and last_verified_at. FAIL-SAFE: a registered but unscored token, an inactive token, or an unregistered token reports tradeable=false. trade_equity enforces this same composite risk.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| mint_or_symbol | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_token_risk_assessment ~179
Per-token risk roll-up over recently observed safety signals (free read). Folds every non-expired signal for ``subject`` (symbol or mint) in the window into the worst risk level seen, a 0..1 risk score, a per-level count breakdown, and the contributing signals (worst-first). Complements -- does not replace -- ``get_risk_assessment`` (regime + position-size guards for deploying a strategy). Descriptive observed data only. Not financial advice. Workflow: INTELLIGENCE / RISK step -- run before quoting or sizing an unfamiliar token; a critical safety signal is a hard skip condition.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| limit | integer | – | – |
| subject | string | yes | – |
| window_hours | integer | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_trading_workflow ~281
Map of how Crank's tools fit into one end-to-end trading flow (read this first). Read-only, free. Returns an ordered, machine-readable workflow: orient -> intelligence -> yields -> simulate (backtest) -> risk-size -> execute (non-custodial) -> monitor -> journal. Each step names the concrete tool(s) to call, their purpose, key inputs, how to use the output downstream, and the decision points that branch the flow -- so an agent that discovered Crank via tools/list can sequence the full tool surface instead of guessing. Descriptive only (DYOR); only execute-phase tools are value-bearing. wallet_address (optional, PUBLIC key only -- non-custodial): when given, appends ``human_activity`` -- count + most-recent manual override on this shared account in the last 72h (decision_type, asset, rationale summary, timestamp) plus an instruction to reconcile with it before acting. Human and agents act on ONE account: every human action is journaled (see journal_query source="human") so it is never invisible to you. Absent/clean (``{"count": 0}``) when there is no override.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| wallet_address | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_transaction_history ~105
Recent transactions for a wallet, parsed + human-readable (limit 1-100). detail="concise" (default) trims each row to signature/type/timestamp/ status (signature is the ID to chain into journal_append's tx_signature); "full" adds description, tokens_involved, token_mints, and amount.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| detail | string | – | – |
| limit | integer | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_usage_report ~86
An agent's own premium-feature spend report (FREE read). Returns per-feature {calls, spend_usd, cost_usd} plus totals from the FeatureUsage ledger. period: today | 7d | 30d | all (default 30d).
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| period | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_venue_health ~154
Live safety/health read for one trading venue (read-only, non-custodial). Returns operational status (live/degraded/suspended), last monitoring heartbeat, on-chain program deploy slot, SDK compatibility headline, TVL + perps 24h volume (DeFiLlama, cached 5 min). venue is a slug e.g. "drift", "jupiter", "pacifica". Use BEFORE routing capital to a venue. Workflow: RISK step (venue-safety gate) -- run before any perps/lending leg; degraded/down reroutes or blocks the order. See get_trading_workflow.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| venue | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_venue_risk_score ~112
Composite venue risk score 0-100 (higher = safer), with breakdown. Read-only. Folds custody tier (A self-custodial / B venue-custodied), multisig threshold, timelock, audit status, exploit history, TVL trend and program age into a transparent weighted score (score_breakdown returned so the number is auditable). Factual assessment, not financial advice.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| venue | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
get_venue_status ~64
Health + capabilities of every perps venue, plus routing config. Reports primary/fallback venue, which venues are routable, per-venue health (operational/degraded/down/disabled), and capability flags incl custody tier.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
intelligence_suggestion_approve ~319
Approve a StrategySuggestion, optionally creating the suggested Strategy. Closes the PROPOSE loop for MCP-only agents: wraps the same approve-and-create service logic as the REST ``StrategySuggestionViewSet.approve`` action instead of a manual ``suggested_config`` round-trip through the strategy create tools, which silently drops the suggestion linkage (``StrategySuggestion.created_strategy`` / hive DecisionRecord.suggestion FK provenance). ``wallet_address`` is the caller's own wallet (recorded as ``approved_by_wallet``); when ``agent_wallet_id`` also resolves to a wallet ``wallet_address`` controls, the suggested Strategy is created through the same executor dry-run gate as every other create path. ``config_overrides`` merges over ``suggested_config`` (e.g. a real ``usd_per_buy``). A wallet without a Turnkey signer still gets the strategy -- paper trade, unsigned tx per tick. Informational rationale only (rules 5-8); the created strategy still runs only through the existing engine gates. Workflow: DECIDE -> EXECUTE step -- the MCP-only closing move for get_strategy_suggestions; pair with backtest_strategy + get_risk_assessment first for the same guardrails any other create path gets.
| Name | Type | Req | Description |
|---|---|---|---|
| agent_wallet_id | – | – | – |
| caller_id | string | – | – |
| config_overrides | – | – | – |
| interval_seconds | integer | – | – |
| suggestion_id | integer | yes | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
journal_append ~389
Record a decision in your private, wallet-scoped journal (free write). Your durable memory on Crank: rationale, intended action, and optional expectations (e.g. {"direction": "up", "horizon": "24h"}) are stored as one opaque body only you can read back; the system later attributes realised P&L from on-chain-verified fills and marks prices at 1h/24h/7d/30d horizons. idempotency_key makes replays safe (offline queues / batch agents). Link evidence via signal_ids / suggestion_id / strategy_id (your own strategies only). Autonomous strategy executions are journaled for you automatically -- use this to add the agent-authored layer on top. ``tx_signature`` (optional): pass the signature a swap/perp/lend/stake tool just returned to link this decision to its verified on-chain fill -- the proof the Layer 2 contribution firewall needs. Unknown signature for this wallet -> 404. If omitted, the wallet's most recent CONFIRMED transaction within a short window is auto-linked as a best-effort fallback -- explicit is still more reliable, pass it whenever you have it. Workflow: DECIDE step -- journal before (or as) you act; query it back with journal_query / get_my_performance.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | – | – |
| caller_id | string | – | – |
| client_platform | string | – | – |
| decision_type | string | yes | – |
| expectations | – | – | – |
| idempotency_key | string | – | – |
| intended_action | string | – | – |
| rationale | string | yes | – |
| session_id | string | – | – |
| signal_ids | – | – | – |
| strategy_id | – | – | – |
| suggestion_id | – | – | – |
| tx_signature | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
journal_query ~267
Read your own decision journal, most recent first (free read). Wallet-scoped: only decisions journaled for wallet_address are ever returned. Filters: window_hours (0 = all), decision_type, strategy_type, asset (mint/symbol as journaled), outcome_sign (positive|negative|zero on realised P&L), source (agent|system|human -- pass source="human" to see only a manual override on this shared account: human and agents act on ONE account, and every human action is journaled so agents can see and reconcile with it). Every returned row carries its source. detail=concise returns id/type/timestamp/pnl rows (token-budget friendly); detail=full adds bodies, evidence refs, and full outcome marks. Workflow: ORIENT step -- recall what you decided (and what a human may have overridden) before deciding again.
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | – | – |
| caller_id | string | – | – |
| decision_type | string | – | – |
| detail | string | – | – |
| limit | integer | – | – |
| outcome_sign | string | – | – |
| source | string | – | – |
| strategy_type | string | – | – |
| wallet_address | string | yes | – |
| window_hours | integer | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
jupiter_swap ~793
Execute a token swap via Jupiter (non-custodial). Without signed_transaction: returns an UNSIGNED base64 transaction for your wallet to sign + broadcast. With signed_transaction: broadcasts the caller-signed tx and returns tx_signature. amount is in base units of input_token. Includes the Crank technology service fee when a referral fee account is configured -- collected ON-CHAIN via Jupiter's platformFeeBps, deducted from swap output. Swaps are NOT additionally gated by x402 (that would double-charge the same fee), so payment_header stays a no-op here (jupiter_swap is not in x402 PAID_TOOLS). pay_in_crank is NO LONGER a no-op: the on-chain rate is now derived from this wallet's volume tier and $CRANK staker / pay-in-$CRANK / Crank Score discounts, so a discounted wallet is quoted a lower platformFeeBps -- the same schedule x402 applies to perps/lend/stake. slippage_bps omitted (None) resolves to the published platform default of 50 bps -- unchanged from before; the returned envelope's slippage.applied_source honestly reports "platform_default" in that case rather than falsely claiming "caller". SECURITY: the output_token is run through multi-layer authenticity verification before any tx is built; an unverified/suspicious/fake token is blocked (UNVERIFIED_TOKEN). Set allow_unverified=true to trade an unverified token at your own risk (hard scam signals are never overridable). ``venue_hint`` is ADVISORY, never required -- spot routes via Jupiter aggregation (the only spot venue today); an unknown hint raises, omitting it is unchanged from before. Workflow: EXECUTE step -- deploy the directional/allocation leg after the risk phase capped the size. Non-custodial. Get a price first with get_quotes. See get_trading_workflow. ``idempotency_key`` (optional): a client-generated UUID. Retrying the SAME call (build or broadcast) with the same key + same args replays the original result instead of re-executing -- guards against a timeout-then-retry double-swap. Reuse th…
| 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 | – | – |
| payment_header | string | – | – |
| signed_transaction | – | – | – |
| slippage_bps | – | – | – |
| venue_hint | – | – | – |
| verify | boolean | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
kill_wallet ~71
Emergency freeze an agent wallet. Sets status=killed so the policy gate refuses every subsequent value-bearing action. Returns confirmation + a frozen-positions count. (Turnkey scoped-key revocation is handled by the deferred provisioning ticket.)
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
lend_borrow ~326
Borrow against deposited collateral (non-custodial). Returns an UNSIGNED base64 tx + current health factor (pre-borrow estimate). amount in base units of borrow_token. Deposit collateral first. Past the daily free tier an x402 payment_header is required. The borrowed token is authenticity-verified first; set allow_unverified=true to borrow an unverified token at your own risk. ``idempotency_key`` (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-borrowing. Reuse the SAME key across the build call and its ``signed_transaction`` completion call -- see lend_deposit; the two legs dedupe independently, so this never raises IDEMPOTENCY_CONFLICT. ``signed_transaction`` / ``verify`` (two-phase execution): see lend_deposit -- re-call with the signed tx and Crank broadcasts it, confirms it on-chain, and re-reads the borrowed balance + obligation health.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_unverified | boolean | – | – |
| amount | integer | yes | – |
| borrow_token | string | yes | – |
| caller_id | string | – | – |
| collateral_token | string | yes | – |
| idempotency_key | string | – | – |
| marginfi_account | – | – | – |
| market | – | – | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| protocol | string | yes | – |
| signed_transaction | – | – | – |
| verify | boolean | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
lend_deposit ~672
Deposit assets to earn yield on Kamino or Marginfi (non-custodial). Returns an UNSIGNED base64 tx to sign + broadcast, plus supply APY. amount is in base units of token. protocol: kamino | marginfi -- pin one to keep exact prior behaviour. Marginfi needs marginfi_account (create via the sidecar). Past the daily free tier an x402 payment_header is required. The deposited token is authenticity-verified first; set allow_unverified=true to supply an unverified token at own risk. ``venue_hint`` / auto-route: pass ``protocol="auto"`` (or ``""``) -- optionally with ``venue_hint`` as an advisory alias, same naming as jupiter_swap/trade_equity -- to route through the SAME primary+fallback health-failover the internal earn/lending trade bridge already applies: an empty rate snapshot on the primary protocol fails over to the configured fallback. Extends this tool instead of adding a separate earn_quote/trade_earn surface, so lend_deposit is now the one first-class MCP path for both a pinned protocol and an auto-routed deposit. A router-resolved call also carries the smart-contract counterparty-risk disclosure in the response (``disclosures``), matching the internal bridge. Workflow: EXECUTE step (yield leg) -- supply idle stables/tokens after comparing get_lending_rates; monitor with get_health_factor. See get_trading_workflow. ``idempotency_key`` (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-depositing. Reuse the SAME key across the build call and its ``signed_transaction`` completion call -- the two legs dedupe independently, so this never raises IDEMPOTENCY_CONFLICT; a NEW key means a genuinely new deposit. ``signed_transaction`` / ``verify`` (two-phase execution): re-call this tool with the SIGNED base64 tx and Crank broadcasts it, then awaits on-chain confirmation and re-reads BOTH the deposited token's balance and the obligation's health -- the response carries a real ``verification`` block ({c…
| Name | Type | Req | Description |
|---|---|---|---|
| allow_unverified | boolean | – | – |
| amount | integer | yes | – |
| caller_id | string | – | – |
| idempotency_key | string | – | – |
| marginfi_account | – | – | – |
| market | – | – | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| protocol | string | yes | – |
| signed_transaction | – | – | – |
| token | string | yes | – |
| venue_hint | – | – | – |
| verify | boolean | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
lend_repay ~270
Repay borrowed amount (non-custodial). Returns an UNSIGNED base64 tx + current health factor. amount in base units of token. Past the daily free tier an x402 payment_header is required. ``idempotency_key`` (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-repaying. Reuse the SAME key across the build call and its ``signed_transaction`` completion call -- see lend_deposit; the two legs dedupe independently, so this never raises IDEMPOTENCY_CONFLICT. ``signed_transaction`` / ``verify`` (two-phase execution): see lend_deposit -- re-call with the signed tx and Crank broadcasts it, confirms it on-chain, and re-reads the repaid balance + obligation health.
| Name | Type | Req | Description |
|---|---|---|---|
| amount | integer | yes | – |
| caller_id | string | – | – |
| idempotency_key | string | – | – |
| marginfi_account | – | – | – |
| market | – | – | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| protocol | string | yes | – |
| signed_transaction | – | – | – |
| token | string | yes | – |
| verify | boolean | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
leverage_close ~189
Unwind a tracked leveraged position: sell -> repay stable -> withdraw. Returns an ORDERED STEP PLAN. position_id from leverage_long. Past the daily free tier an x402 payment_header is required. ``jurisdiction``: closes are geo-gated too -- see short_open. ``idempotency_key`` (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-unwinding the position.
| Name | Type | Req | Description |
|---|---|---|---|
| caller_id | string | – | – |
| idempotency_key | string | – | – |
| ip | string | – | – |
| jurisdiction | – | – | – |
| marginfi_account | – | – | – |
| market | – | – | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| position_id | integer | yes | – |
| slippage_bps | integer | – | – |
| wallet_address | string | yes | – |
Structured output declared, but exposes no named fields.
No examples provided.
leverage_long ~280
Open a lending-based leveraged long by looping deposit -> borrow stable -> buy more -> redeposit. Returns an ORDERED STEP PLAN of UNSIGNED base64 txs, effective leverage, loop count, health factor, and a position_id. amount in base units. The levered token is authenticity-verified first; set allow_unverified=true to lever an unverified mint at your own risk. Past the daily free tier an x402 payment_header is required. ``jurisdiction``: leverage is geo-gated too -- see short_open. ``idempotency_key`` (optional): a client-generated UUID. Retrying with the same key + same args replays the original result instead of re-opening the leveraged position.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_unverified | boolean | – | – |
| amount | integer | yes | – |
| caller_id | string | – | – |
| idempotency_key | string | – | – |
| ip | string | – | – |
| jurisdiction | – | – | – |
| marginfi_account | – | – | – |
| market | – | – | – |
| pay_in_crank | boolean | – | – |
| payment_header | string | – | – |
| protocol | string | – | – |
| slippage_bps | integer | – | – |
| stable_token | – | – | – |
| target_leverage | number | yes | – |
| token | string | yes | – |
| wallet_address | string | 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.