Crank Protocol is a remote MCP server that gives an AI agent 188 tools, among them approve_proposal, asset_classification, authorize_session_signer. It answers at https://mcp.crank.ing/mcp over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 6 of 6 times since 10 September 2026; the last check, on 19 October 2026, succeeded.
Non-custodial DeFi tools for AI agents on Solana: swaps, perps, lending, staking, equities.
Description as the publisher wrote it.
| Tool | What it does |
|---|---|
approve_proposal | Approve a pending PROPOSAL within its TTL, then re-dispatch it (non-custodial control plane). Flips a propose-mode proposal (see set_permission_mode) from pending to approved, then immediately re-invokes the original deferred tool call (sto Inputs: proposal_id, approved_by, caller_id |
asset_classification | Classify a token: crypto / equity / wrapped_major / lst / stablecoin. Provide token_address (mint) or a known symbol. Tokenized securities (xStocks, Ondo) classify as 'equity', which subjects strategies to the SEC framework guardrails (neut Inputs: token_address, symbol, caller_id |
authorize_session_signer | Refuses ALWAYS with BROWSER_CONFIRMATION_REQUIRED. Minting (or reactivating) a session signer grants NEW signing authority -- a trust grant at least as sensitive as loosening a policy, which is already browser-gated. This tool therefore ref Inputs: wallet_address, signer_pubkey, label, capabilities, expires_at, caller_id |
backtest_strategy | Backtest a strategy on historical Solana OHLCV before deploying capital. strategy_type is one of the 17 Crank strategy types (dca, momentum, rebalance, stoploss, protect, snipe, sentiment, vault, yield_farm, hedge, equity_dca, perp_grid, co Inputs: strategy_type, asset, timeframe, start_date, end_date, params |
bridge_in | Fund your Solana wallet from a major EVM chain (non-custodial). Cross-chain FUNDING rail (deBridge DLN): builds an UNSIGNED EVM transaction creating a bridge order that pays ``dst_token`` (a Solana mint, e.g. USDC) to ``wallet_address``. Si Inputs: src_chain, src_token, amount, dst_token, wallet_address, evm_sender |
bridge_out | Bridge value from Solana out to a major EVM chain (non-custodial). Cross-chain FUNDING rail (deBridge DLN), jupiter_swap two-phase pattern: without ``signed_transaction`` returns an UNSIGNED base64 Solana transaction creating the bridge ord Inputs: dst_chain, dst_token, src_token, amount, wallet_address, evm_recipient |
bulk_send_social | Distribute one token to many X handles in one call (non-custodial). ``recipients`` is a list of ``{recipient_handle, amount, message?}`` dicts (``recipient`` accepted as an alias; ``amount`` in base units; ``message`` an optional per-recipi Inputs: recipients, token, sender_wallet, platform, referral, caller_id |
cancel_perp_order | Cancel a resting perp order on its venue (non-custodial). ``jurisdiction``: cancel is geo-gated too -- see place_perp_order. ``idempotency_key`` (optional): a client-generated UUID. Retrying with the same key + same args replays the origina Inputs: wallet_address, order_id, venue, acknowledge_tier_b, signed_transaction, verify |
check_claim_status | Sender-facing claim status of a social send (FREE read). Look up by ``claim_id`` (the send id) OR ``recipient`` (X handle); optionally scope a recipient lookup to one ``sender_wallet``. Returns ``{"sends": [...]}`` each with status (pending Inputs: claim_id, recipient, sender_wallet, caller_id |
claim_ilo_tokens | 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 -- the Inputs: launch_id, wallet_address, pledger_token_account, caller_id, idempotency_key |
claim_status | Public status of a crank.ing claim code (status, amount, claimable, expiry). Inputs: code, caller_id |
clear_agnta_grant | Remove a wallet's AGNTA DelegationGrant cap opt-in (non-custodial control plane). LOOSENS enforcement (removes a cap constraining every value-bearing call on top of WalletPolicy) -- for a Lane 2 wallet this raises BROWSER_CONFIRMATION_REQUI Inputs: wallet_address, caller_id |
clone_strategy | Clone a published strategy config to a wallet (records attribution). Returns the config_template to deploy via the strategy create tools. The clone is attributed to the template author for the clone-creator fee share (15% of the tech fee on Inputs: template_id, wallet_address, caller_id |
close_perp_position | Close a perp position (full/partial) on its venue (non-custodial). position_id is venue-native (for Drift it is the market symbol). close_pct in (0, 100]. Returns an UNSIGNED tx / signing payload to sign + broadcast. ``jurisdiction``: close Inputs: wallet_address, position_id, close_pct, venue, acknowledge_tier_b, signed_transaction |
compose_strategy | Validate a composite definition -- returns the normalised definition + validation report. No persist; read = FREE per the fee schedule. Checks: schema, stream existence against the signal catalog, rule-tree depth/size limits, required risk Inputs: definition |
create_agent_wallet | 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_addres Inputs: agent_id, display_name, default_policies, wallet_address, owner_address, caller_id |
create_execution_intent | 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 Inputs: input_token, output_token, amount, wallet_address, slippage_bps, allow_unverified |
declare_jurisdiction | Declare your wallet's jurisdiction for geo-gated trading. Gap: before this tool, the ONLY way to declare a jurisdiction was the ``jurisdiction=`` param on ``trade_equity`` -- an agent that only ever used perps/short/leverage tools had no wr Inputs: wallet_address, jurisdiction, ip, caller_id |
delete_webhook | Delete one of a wallet's webhook subscriptions (free control-plane write). Inputs: wallet_address, webhook_id, caller_id |
detect_regime | Detect the current market regime for a Solana asset (read-only, deterministic). Classifies the latest candle of recent OHLCV as bull / bear / range / volatile and returns a RegimeSignal: regime, confidence, trend_strength, volatility_percen Inputs: asset, timeframe, lookback_candles, caller_id |
discover_agents | Find registered agents, optionally filtered to one capability. capability one of swap|perps|lending|staking|strategies|signals|equity|onramp (empty = all). Ranked by reputation then recency. Read-only, free. Inputs: capability, limit, caller_id |
discover_strategies | Browse published strategies (read-only, free). Crypto-only. strategy_type filters to one of the 16 Crank strategy types (empty = all). sort ranks by clones|sharpe|return|sortino|win_rate|drawdown (default clones). detail="concise" (default) Inputs: strategy_type, limit, sort, detail, caller_id |
enable_agent_wallet | Open the browser-confirmation handshake for a Lane 2 agent wallet. Does NOT create a wallet. Returns a pairing-style confirmation URL + device_code -- show the user verification_url_complete and ask them to approve it in their OWN browser ( Inputs: agent_id, display_name, caller_id |
equity_corporate_events | Earnings / dividend / split calendar for a tokenized equity. Read-only. The after-hours-agent feature: events an overnight strategy reacts to while the underlying trades 24/7 on Solana. Provider-backed; returns an honest empty payload + SEC Inputs: symbol, caller_id |
equity_market_hours | NYSE session status + the 24/7-on-Solana availability flag. Read-only. status: closed | pre_market | open | after_hours, with next open/close. Highlights the structural advantage: tokenized equities trade 24/7 on-chain regardless of NYSE ho Inputs: symbol, caller_id |
equity_markets | List available tokenized equities with issuer, regime, price, market hours. Read-only. Source: the admin-editable TokenRegistry. Each row carries issuer (xStocks/Ondo), regulatory_framework, geo_restrictions, and best-effort price/volume/ma Inputs: caller_id |
equity_positions | Tokenized-equity holdings for a wallet with live prices + market hours. Read-only. Filters balances to registered equity mints; each: symbol, quantity, current_price, current_value_usd, issuer, regulatory_framework (avg_cost / unrealized P& Inputs: wallet_address, caller_id |
equity_quote | Read-only Jupiter quote for a tokenized-equity trade (no execution). amount is in base units of the INPUT token (USDC for buy, the equity for sell). Returns expected output, price impact, effective fee, slippage, and the SEC disclaimer. ``v Inputs: symbol, amount, side, slippage_bps, venue_hint, caller_id |
evm_balances | Native (ETH) and ERC-20 balances for an address on an EVM chain. chain defaults to "base". ERC-20 balances are returned only for the contracts named in token_addresses -- an EVM RPC endpoint cannot enumerate a wallet's tokens, and guessing Inputs: address, chain, token_addresses, caller_id |
evm_swap | Execute a spot swap on an EVM chain (non-custodial, two-phase, OPT-IN). chain must be named explicitly -- nothing routes to an EVM chain by default and a Solana route never fails over onto one. Base only today. Without signed_transaction: r Inputs: sell_token, buy_token, sell_amount, taker, chain, slippage_bps |
evm_swap_quote | INDICATIVE swap quote on an EVM chain (pricing and routing only). sell_amount is in the sell token's base units. Returns no transaction and no calldata -- this quote is not executable and cannot be signed. Free (no technology service fee) - Inputs: sell_token, buy_token, sell_amount, chain, taker, caller_id |
evm_token_price | Indicative price of an ERC-20 token on an EVM chain, quoted via 0x. Priced off routed liquidity (what one whole token sells for against quote_token, USDC by default), not an oracle. Free (no technology service fee) -- a read with no transac Inputs: token_address, chain, quote_token, amount, caller_id |
flash_loan | Marginfi flash loan for arbitrage (non-custodial, atomic). instructions are JSON ix executed between borrow + repay legs. Returns a single UNSIGNED base64 tx that reverts unless repaid in-transaction. The borrowed token is authenticity-veri Inputs: token, amount, instructions, wallet_address, marginfi_account, allow_unverified |
fund_wallet | Fund a wallet with fiat via MoonPay (card/bank/Apple Pay -> USDC). Returns a hosted checkout_url for the user to complete payment + a session_id to poll with get_onramp_status. Purchased USDC settles directly to wallet_address (non-custodia Inputs: wallet_address, amount_usd, payment_method, currency, caller_id, payment_header |
get_agent_profile | Read an agent's published profile + its referral stats (read-only, free). Inputs: wallet_address, caller_id |
get_all_venues_status | Dashboard overview of all configured venues for routing decisions. Read-only. One health record per active venue (status, deploy slot, TVL, 24h volume, composite safety score) so an agent can pick a venue in a single call. detail="concise" Inputs: detail, caller_id |
get_arb_discrepancies | Persisted cross-venue discrepancy episodes (free read). Already-debounced ``cross_exchange`` signals (each required >= N consecutive polls above the discrepancy threshold to exist at all), filtered to ``spread_bps >= min_spread_bps`` and op Inputs: min_spread_bps, assets, window_hours, caller_id |
get_balances | Wallet token balances (SOL + all SPL tokens) with USD valuations. detail="concise" (default) returns total_usd + count + balances trimmed to token/symbol/usd_value (IDs for chaining into e.g. get_quotes); "full" returns every field (amount, Inputs: wallet_address, detail, caller_id |
get_bridge_quote | Cross-chain bridge quote via deBridge DLN (FREE read, no execution). Quote moving ``amount`` (source-token base units) of ``src_token`` on ``src_chain`` into ``dst_token`` on ``dst_chain``. Supported chains: ethereum, arbitrum, base, optimi Inputs: src_chain, src_token, amount, dst_chain, dst_token, caller_id |
get_bridge_status | Poll a dispatched DLN bridge order's fulfillment status (FREE read). Follow-up to bridge_in/bridge_out: a dispatched order stays "pending"/"broadcast" in Crank's own record forever unless polled -- this queries deBridge's dlnOrderStatus end Inputs: order_id, caller_id |
get_collective_insights, get_consensus, get_contrarian_signals, get_crank_score, get_cross_exchange, get_disclaimers, get_emerging_patterns, get_health_factor, get_ilo_adoption_status, get_ilo_details, get_indicators, get_integrator_earnings, get_integrator_stats, get_intent_status, get_journal_card, get_leaderboard, get_lending_rates, get_lst_yields, get_market_briefing, get_market_regime, get_ml_signal, get_my_contribution_score, get_my_performance, get_my_pledge_status, get_onramp_status, get_ooda_status, get_portfolio_charter, get_quests, get_quotes, get_regulatory_updates, get_risk_assessment, get_score, get_score_leaderboard, get_signal_effectiveness, get_signals, get_social_sends, get_source_accuracy, get_source_weights, get_strategy_evolution_report, get_strategy_leaderboard, get_strategy_suggestions, get_technology_updates, get_token_classification, get_token_risk_assessment, get_trading_workflow, get_transaction_history, get_usage_report, get_venue_health, get_venue_risk_score, get_venue_status, intelligence_suggestion_approve, journal_append, journal_query, jupiter_swap, kill_wallet, lend_borrow, lend_deposit, lend_repay, leverage_close, leverage_long, liquid_stake, list_alerts, list_session_signers, list_signal_catalog, list_webhooks, lst_swap, offramp_to_fiat, perp_close, perp_funding_rates, perp_funding_rates_all, perp_markets, perp_markets_all, perp_modify, perp_open_long, perp_open_short, perp_positions, perp_positions_all, place_perp_order, pledge_to_ilo, poll_agent_wallet_enable, poll_agnta_grant_clear, poll_session_signer_authorization, poll_wallet_policy_loosening, portfolio_snapshot, propose_allocation, propose_template_update, publish_strategy, register_agent, register_counterparty_set, register_integrator, register_referrer, register_webhook, report_registry_install, request_agnta_grant_clear, request_session_signer_authorization, request_wallet_policy_loosening, revoke_session_signer, search_tools, send_token_social, set_agnta_grant, set_alert, set_liquidation_alert, set_ooda_consent, set_permission_mode, set_portfolio_charter, set_wallet_policy, share_journal_card, short_close, short_open, short_status, sidecar_health, sr_backtest, sr_configure_strategy, sr_detect_levels, strategy_arb_create, strategy_basis_trade_create, strategy_cancel, strategy_composite_create, strategy_copy_wallet_create, strategy_dca_create, strategy_equity_dca_create, strategy_hedge_create, strategy_list, strategy_market_make_create, strategy_modify, strategy_momentum_create, strategy_pause, strategy_perp_grid_create, strategy_protect_create, strategy_rebalance_create, strategy_resume, strategy_sentiment_create, strategy_snipe_create, strategy_status, strategy_stoploss_create, strategy_vault_create, strategy_yield_farm_create, suggest_parameter_adjustment, token_info, trade_equity, unpublish_journal_card, unstake_lst, update_agent_profile, venue_risk_comparison, verify_token, verify_transaction, verify_treasury_settlement_status, wallet_status
Every block below points at https://mcp.crank.ing/mcp. Pick your client and copy.
claude mcp add --transport http crank-protocol https://mcp.crank.ing/mcp
{
"mcpServers": {
"crank-protocol": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.crank.ing/mcp"]
}
}
}{
"mcpServers": {
"crank-protocol": {
"url": "https://mcp.crank.ing/mcp"
}
}
}{
"servers": {
"crank-protocol": {
"type": "http",
"url": "https://mcp.crank.ing/mcp"
}
}
}{
"context_servers": {
"crank-protocol": {
"url": "https://mcp.crank.ing/mcp"
}
}
}{
"mcpServers": {
"crank-protocol": {
"serverUrl": "https://mcp.crank.ing/mcp"
}
}
}{
"mcpServers": {
"crank-protocol": {
"url": "https://mcp.crank.ing/mcp"
}
}
}name: Crank Protocol
version: 0.0.1
schema: v1
mcpServers:
- name: Crank Protocol
type: streamable-http
url: https://mcp.crank.ing/mcp{
"mcpServers": {
"crank-protocol": {
"httpUrl": "https://mcp.crank.ing/mcp"
}
}
}{
"mcpServers": {
"crank-protocol": {
"type": "http",
"url": "https://mcp.crank.ing/mcp"
}
}
}{
"mcpServers": {
"crank-protocol": {
"url": "https://mcp.crank.ing/mcp"
}
}
}goose://extension?url=https%3A%2F%2Fmcp.crank.ing%2Fmcp&type=streamable_http&id=crank-protocol&name=Crank%20Protocol
It answered our last check on 19 October 2026 in 396 ms. Over 6 checks since 10 September 2026 it answered 6. Status here comes from Neuronto's own probes, not from the publisher.
Yes. It is published by crank.ing and served from mcp.crank.ing, the vendor's own domain: https://mcp.crank.ing/mcp.
188, as returned by the server's own tools/list on 12 September 2026: approve_proposal, asset_classification, authorize_session_signer, backtest_strategy, bridge_in, bridge_out, bulk_send_social, cancel_perp_order, and 180 more.
It answered our last check on 19 October 2026 in 396 ms. Over 6 checks since 10 September 2026 it answered 6.
Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://mcp.crank.ing/mcp. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.
It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.
Publisher: ing.crank. Endpoint host: mcp.crank.ing. ARD identifier: urn:air:ing.crank:mcp:crank.
First indexed 10 September 2026. The tools are exactly what the server returned; nothing on this page
is inferred from its name. Ranking in Neuronto search is never for sale.