{"server":"io.github.HASAVAGE/teardrop","count":35,"tools":[{"name":"assess_counterparty_risk","title":"Assess Counterparty Risk","description":"Return a decision-ready counterparty-risk verdict for an EVM address before funds or authority are committed. The result branches to high_risk, caution, acceptable, or insufficient_data with the evidence needed for the calling agent to act.\n\nUse when: Delegate this check before sending funds, granting approvals, or interacting with an unknown EVM address when the caller needs a bounded risk decision.\n\nLimitations: Analytics and heuristic risk assessment; not a credit bureau, fraud guarantee, or legal endorsement. Relies on DeBank indexing and on-chain Aave/Compound contract states.\n\nAlternatives: get_wallet_approvals, get_liquidation_risk, get_wallet_positions","input_schema":{"type":"object","title":"mcp_assess_counterparty_riskArguments","required":["wallet_address"],"properties":{"chain_ids":{"type":"array","items":{"type":"string"},"title":"Chain Ids","default":["eth","base"],"description":"DeBank chain identifiers scoping approvals and history; positions and net worth remain all-chain."},"wallet_address":{"type":"string","title":"Wallet Address","description":"EVM wallet address (0x-prefixed)"}}},"output_schema":{"type":"object","$defs":{"RiskFactor":{"type":"object","title":"RiskFactor","required":["category","severity","detail"],"properties":{"detail":{"type":"string","title":"Detail"},"category":{"type":"string","title":"Category"},"severity":{"enum":["high","medium","low"],"type":"string","title":"Severity"}}},"DataProvenance":{"type":"object","title":"DataProvenance","required":["provider","retrieved_at"],"properties":{"provider":{"type":"string","title":"Provider"},"cache_hit":{"type":"boolean","title":"Cache Hit","default":false},"source_urls":{"type":"array","items":{"type":"string"},"title":"Source Urls"},"retrieved_at":{"type":"string","title":"Retrieved At"},"cache_age_seconds":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"title":"Cache Age Seconds","default":null},"cache_ttl_seconds":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Cache Ttl Seconds","default":null},"source_fetched_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Fetched At","default":null}},"description":"Machine-readable source and freshness metadata for a tool response."},"ActivitySummary":{"type":"object","title":"ActivitySummary","properties":{"tx_count":{"type":"integer","title":"Tx Count","default":0},"cex_names":{"type":"array","items":{"type":"string"},"title":"Cex Names"},"distinct_counterparties":{"type":"integer","title":"Distinct Counterparties","default":0}}},"ApprovalSummary":{"type":"object","title":"ApprovalSummary","properties":{"total":{"type":"integer","title":"Total","default":0},"unlimited":{"type":"integer","title":"Unlimited","default":0},"hacked_spenders":{"type":"integer","title":"Hacked Spenders","default":0},"sum_exposure_usd":{"type":"number","title":"Sum Exposure Usd","default":0},"abandoned_spenders":{"type":"integer","title":"Abandoned Spenders","default":0},"unverified_spenders":{"type":"integer","title":"Unverified Spenders","default":0}}},"LiquidationSummary":{"type":"object","title":"LiquidationSummary","properties":{"status":{"type":"string","title":"Status","default":"no_debt"},"worst_health_factor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Worst Health Factor","default":null},"has_borrow_positions":{"type":"boolean","title":"Has Borrow Positions","default":false}}}},"title":"AssessCounterpartyRiskOutput","required":["wallet_address","verdict","provenance","as_of"],"properties":{"as_of":{"type":"string","title":"As Of"},"verdict":{"enum":["high_risk","caution","acceptable","insufficient_data"],"type":"string","title":"Verdict"},"activity":{"$ref":"#/$defs/ActivitySummary"},"provenance":{"$ref":"#/$defs/DataProvenance"},"liquidation":{"$ref":"#/$defs/LiquidationSummary"},"risk_factors":{"type":"array","items":{"$ref":"#/$defs/RiskFactor"},"title":"Risk Factors"},"data_complete":{"type":"boolean","title":"Data Complete","default":true},"partial_errors":{"type":"array","items":{"type":"string"},"title":"Partial Errors"},"wallet_address":{"type":"string","title":"Wallet Address"},"approval_summary":{"$ref":"#/$defs/ApprovalSummary"},"total_net_worth_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Net Worth Usd","default":null}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"assess_market_resolution","title":"Assess Market Resolution","description":"Return a decision-ready resolution-risk verdict for one Polymarket market before an agent trades, quotes, or forecasts it. The result branches to tradeable, ambiguous, avoid, or insufficient_data and names the resolution basis (price_feed, official_source, media_consensus, unspecified), UMA dispute state, rule-wording risks, and executability (liquidity, spread) so the calling agent can act without reading the full rules.\n\nUse when: Call once per market before placing, quoting, or forecasting a Polymarket position when the caller needs to know whether the rules and resolution state make the outcome well-defined. Repeat calls within two minutes return cached data.\n\nLimitations: Heuristic analysis of Polymarket rule wording and Gamma API state; not a probability forecast, legal advice, or a guarantee of how UMA voters resolve. Does not read order-book depth, event-level augmented negative-risk settings, or clarifications published off-platform.\n\nAlternatives: web_search, http_fetch","input_schema":{"type":"object","title":"mcp_assess_market_resolutionArguments","required":["market"],"properties":{"market":{"type":"string","title":"Market","description":"Polymarket market slug (e.g. 'will-bitcoin-reach-150k-in-2026'), numeric Gamma market id, or a polymarket.com market URL (the last path segment is used)."}}},"output_schema":{"type":"object","$defs":{"DataProvenance":{"type":"object","title":"DataProvenance","required":["provider","retrieved_at"],"properties":{"provider":{"type":"string","title":"Provider"},"cache_hit":{"type":"boolean","title":"Cache Hit","default":false},"source_urls":{"type":"array","items":{"type":"string"},"title":"Source Urls"},"retrieved_at":{"type":"string","title":"Retrieved At"},"cache_age_seconds":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"title":"Cache Age Seconds","default":null},"cache_ttl_seconds":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Cache Ttl Seconds","default":null},"source_fetched_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Fetched At","default":null}},"description":"Machine-readable source and freshness metadata for a tool response."},"MarketRiskFactor":{"type":"object","title":"MarketRiskFactor","required":["code","category","severity","detail"],"properties":{"code":{"type":"string","title":"Code"},"detail":{"type":"string","title":"Detail"},"category":{"enum":["state","resolution","rules","execution"],"type":"string","title":"Category"},"severity":{"enum":["high","medium","low"],"type":"string","title":"Severity"}}}},"title":"AssessMarketResolutionOutput","required":["market_id","slug","question","verdict","verdict_reason","resolution_basis","provenance","as_of"],"properties":{"slug":{"type":"string","title":"Slug"},"as_of":{"type":"string","title":"As Of"},"spread":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Spread","default":null},"verdict":{"enum":["tradeable","ambiguous","avoid","insufficient_data"],"type":"string","title":"Verdict"},"best_ask":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Best Ask","default":null},"best_bid":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Best Bid","default":null},"disputed":{"type":"boolean","title":"Disputed","default":false},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date","default":null},"neg_risk":{"type":"boolean","title":"Neg Risk","default":false},"question":{"type":"string","title":"Question"},"market_id":{"type":"string","title":"Market Id"},"provenance":{"$ref":"#/$defs/DataProvenance"},"rule_flags":{"type":"array","items":{"type":"string"},"title":"Rule Flags"},"uma_status":{"type":"string","title":"Uma Status","default":""},"hours_to_end":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hours To End","default":null},"risk_factors":{"type":"array","items":{"$ref":"#/$defs/MarketRiskFactor"},"title":"Risk Factors"},"liquidity_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Liquidity Usd","default":null},"outcome_prices":{"type":"object","title":"Outcome Prices","additionalProperties":{"type":"number"}},"verdict_reason":{"type":"string","title":"Verdict Reason"},"resolution_basis":{"enum":["price_feed","official_source","media_consensus","unspecified"],"type":"string","title":"Resolution Basis"},"resolution_source":{"type":"string","title":"Resolution Source","default":""}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"calculate","title":"Calculate","description":"Evaluate a safe arithmetic expression and return the numeric result. Supports +,-,*,/,**,%,sqrt,abs,round,floor,ceil,log,sin,cos,tan,pi,e. Use for derived figures (ratios, differences, percentages) that no tool output already provides.\n\nUse when: Use when an agent must derive a value that tool outputs do not already include, such as a ratio, spread, or percentage. Do not use to re-derive pre-computed fields like std_30d or dca_baseline_90d that get_token_price_historical returns.\n\nLimitations: Arithmetic only — no aggregation over tool history, no unit conversion, and no financial modeling beyond the listed functions. Errors return an error field rather than raising.\n\nAlternatives: get_token_price_historical, get_datetime","input_schema":{"type":"object","title":"mcp_calculateArguments","required":["expression"],"properties":{"expression":{"type":"string","title":"Expression","maxLength":200,"description":"A safe arithmetic expression, e.g. '(3 + 4) * 2 / sqrt(9)'"}}},"output_schema":{"type":"object","title":"CalculateOutput","required":["expression"],"properties":{"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","default":null},"result":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Result","default":null},"expression":{"type":"string","title":"Expression"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"convert_currency","title":"Convert Currency","description":"Convert an amount between fiat currencies (USD, EUR, GBP) and crypto assets (BTC, ETH, USDC, SOL) and return the converted amount plus the exchange rate used.\n\nUse when: Use when an amount must be expressed in a different currency than the source data — for example converting a USD portfolio value into EUR, or a fiat amount into its crypto equivalent. For prices only, get_token_price returns the rate directly without a second call.\n\nLimitations: Spot-rate conversion at request time; no historical or forward rates, and no slippage or fee modeling. Actual swap execution differs — use get_dex_quote for executable on-chain quotes.\n\nAlternatives: get_token_price, get_dex_quote","input_schema":{"type":"object","title":"mcp_convert_currencyArguments","required":["amount","from_currency","to_currency"],"properties":{"amount":{"type":"number","title":"Amount","description":"Amount to convert","exclusiveMinimum":0},"to_currency":{"type":"string","title":"To Currency","maxLength":20,"minLength":1,"description":"Target currency (e.g. 'USD', 'EUR', 'BTC')"},"from_currency":{"type":"string","title":"From Currency","maxLength":20,"minLength":1,"description":"Source currency (e.g. 'ETH', 'USD', 'BTC')"}}},"output_schema":{"type":"object","title":"ConvertCurrencyOutput","required":["amount","from_currency","to_currency","converted_amount","rate","source"],"properties":{"rate":{"type":"number","title":"Rate"},"amount":{"type":"number","title":"Amount"},"source":{"type":"string","title":"Source"},"to_currency":{"type":"string","title":"To Currency"},"from_currency":{"type":"string","title":"From Currency"},"converted_amount":{"type":"number","title":"Converted Amount"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"count_text_stats","title":"Count Text Stats","description":"Return word, character, sentence, and paragraph counts plus average words per sentence for a given text, for length checks and content sizing decisions.\n\nUse when: Use when output length must be validated or reported — e.g. verifying a summary meets a length contract or comparing document sizes. Do not use for semantic summarization; it counts only.\n\nLimitations: Pure counting on the provided text — no language detection, no reading-level or sentiment analysis, and no retrieval of external content.\n\nAlternatives: web_search, http_fetch","input_schema":{"type":"object","title":"mcp_count_text_statsArguments","required":["text"],"properties":{"text":{"type":"string","title":"Text","maxLength":10000,"description":"Text to summarize"}}},"output_schema":{"type":"object","title":"SummarizeTextOutput","required":["character_count","word_count","sentence_count","paragraph_count","average_words_per_sentence"],"properties":{"word_count":{"type":"integer","title":"Word Count"},"sentence_count":{"type":"integer","title":"Sentence Count"},"character_count":{"type":"integer","title":"Character Count"},"paragraph_count":{"type":"integer","title":"Paragraph Count"},"average_words_per_sentence":{"type":"number","title":"Average Words Per Sentence"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"decode_transaction","title":"Decode Transaction","description":"Decode a transaction's calldata into a human-readable function name and arguments, and return transaction status (1=success, 0=revert), gas used, and block number. Uses a supplied ABI when provided, otherwise 4byte.directory. Supports Ethereum mainnet and Base.\n\nUse when: Use when one known transaction must be explained — what function was called, with what arguments, and whether it succeeded. For wallet-wide activity patterns use get_wallet_history instead.\n\nLimitations: 4byte.directory matching can be ambiguous or absent for custom contracts; supply an ABI for precise decoding. One transaction per call; Ethereum mainnet and Base only.\n\nAlternatives: get_transaction, get_wallet_history","input_schema":{"type":"object","title":"mcp_decode_transactionArguments","required":["tx_hash"],"properties":{"tx_hash":{"type":"string","title":"Tx Hash","description":"Transaction hash (0x… 64 hex chars)"},"abi_json":{"anyOf":[{"type":"string","maxLength":65536},{"type":"null"}],"title":"Abi Json","default":null,"description":"Optional ABI JSON array for decoding. If omitted, 4byte.directory is used."},"chain_id":{"type":"integer","title":"Chain Id","default":1,"description":"Chain ID (1=Ethereum, 8453=Base)"}}},"output_schema":{"type":"object","title":"DecodeTransactionOutput","required":["tx_hash","from_address","to_address","value_eth","gas_used","block_number","function_selector","function_name","decoded_args","raw_calldata","decode_source","chain_id"],"properties":{"note":{"type":"string","title":"Note","default":"decoded_args values are raw ABI-decoded types; uint256 amounts have not been decimals-formatted — do not call read_contract or get_erc20_balance to interpret them unless the user explicitly asks. Addresses (from_address, to_address, decoded_args) are plain hex — do not call resolve_ens to label them unless the user explicitly asks."},"status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status","default":null,"description":"1=success, 0=revert, None=pending"},"tx_hash":{"type":"string","title":"Tx Hash"},"chain_id":{"type":"integer","title":"Chain Id"},"gas_used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gas Used"},"value_eth":{"type":"string","title":"Value Eth"},"to_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Address"},"block_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Block Number"},"decoded_args":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Decoded Args"},"from_address":{"type":"string","title":"From Address"},"raw_calldata":{"type":"string","title":"Raw Calldata"},"decode_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decode Source"},"function_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Function Name"},"function_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Function Selector"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"delegate_to_agent","title":"Delegate To Agent","description":"Delegate a task to a remote A2A-compliant agent: discover its capabilities via its agent card, send it a message, handle payment, and return the result. Use only when no local platform tool can fulfil the request.\n\nUse when: Use when a task requires specialist capabilities beyond the local tool set. Call discover_agents first when the remote agent URL is unknown. Do not retry unchanged after error_type=advertised_price_exceeds_cap; pick another result or adjust the cap.\n\nLimitations: Requires an allowlisted remote URL and sufficient delegation budget; the remote agent's price and capability claims are read from its card and are not independently verified. Involves real payment.\n\nAlternatives: discover_agents, web_search","input_schema":{"type":"object","title":"mcp_delegate_to_agentArguments","required":["agent_url","task_description"],"properties":{"agent_url":{"type":"string","title":"Agent Url","maxLength":2000,"minLength":10,"description":"Base URL of the remote A2A agent (e.g. https://agent.example.com)"},"task_type":{"enum":["general","research","analysis","data_retrieval","coding","transaction","automation"],"type":"string","title":"Task Type","default":"general","description":"Broad task class for routing telemetry; never include user data or task text."},"task_description":{"type":"string","title":"Task Description","maxLength":4096,"minLength":1,"description":"Natural language description of the task to delegate"}}},"output_schema":{"type":"object","title":"DelegateToAgentOutput","required":["agent_name","status","result"],"properties":{"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","default":null,"description":"Error message, if any"},"result":{"type":"string","title":"Result","description":"Text result extracted from the remote agent's response"},"status":{"type":"string","title":"Status","description":"A2A task state: completed, failed, etc."},"cost_usdc":{"type":"integer","title":"Cost Usdc","default":0,"description":"Cost of this delegation in atomic USDC"},"agent_name":{"type":"string","title":"Agent Name","description":"Name of the remote agent (from its agent card)"},"error_type":{"anyOf":[{"type":"string","const":"advertised_price_exceeds_cap"},{"type":"null"}],"title":"Error Type","default":null,"description":"Stable error type for delegation failures that require planner recovery."}}},"annotations":{"readOnlyHint":false,"openWorldHint":true,"idempotentHint":false},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"discover_agents","title":"Discover Agents","description":"Find opt-in remote A2A agents, published tool capabilities, endpoints, and public reputation status.\n\nUse when: Use before delegate_to_agent when a specialist agent is needed but its URL is unknown.\n\nLimitations: Discovery is read-only and does not add an agent to the org allowlist; delegate_to_agent remains authoritative.\n\nAlternatives: delegate_to_agent","input_schema":{"type":"object","title":"mcp_discover_agentsArguments","properties":{"q":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Q","default":null,"description":"Optional search across agent name, organization slug, or published tool name"},"limit":{"type":"integer","title":"Limit","default":20,"maximum":50,"minimum":1,"description":"Maximum number of agents to return"}}},"output_schema":{"type":"object","$defs":{"AgentReputation":{"type":"object","title":"AgentReputation","required":["status"],"properties":{"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score","default":null},"status":{"enum":["rated","unrated"],"type":"string","title":"Status"},"is_stale":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Stale","default":null},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence","default":null},"sample_size":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sample Size","default":null},"success_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Success Rate","default":null},"last_event_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Event At","default":null},"unique_caller_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unique Caller Count","default":null}}},"DiscoveredAgent":{"type":"object","title":"DiscoveredAgent","required":["org_slug","org_name","agent_url","agent_card_url","message_endpoint","catalog_endpoint","tool_count","allowlisted","reputation"],"properties":{"org_name":{"type":"string","title":"Org Name"},"org_slug":{"type":"string","title":"Org Slug"},"agent_url":{"type":"string","title":"Agent Url"},"reputation":{"$ref":"#/$defs/AgentReputation"},"tool_count":{"type":"integer","title":"Tool Count"},"tool_names":{"type":"array","items":{"type":"string"},"title":"Tool Names","description":"Names of up to 20 active published tools exposed by the agent organization"},"allowlisted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Allowlisted","description":"Whether the caller's org has this endpoint in its allowlist; null when caller context is unavailable"},"registered_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registered At","default":null,"description":"UTC timestamp when the organization first registered its A2A endpoint"},"agent_card_url":{"type":"string","title":"Agent Card Url"},"catalog_endpoint":{"type":"string","title":"Catalog Endpoint"},"message_endpoint":{"type":"string","title":"Message Endpoint"}}}},"title":"DiscoverAgentsOutput","required":["generated_at","count","agents"],"properties":{"count":{"type":"integer","title":"Count"},"agents":{"type":"array","items":{"$ref":"#/$defs/DiscoveredAgent"},"title":"Agents"},"generated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generated At"},"registration_endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registration Endpoint","default":null,"description":"Endpoint where an organization can publish its own A2A endpoint."},"registration_benefits_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registration Benefits Url","default":null,"description":"Machine-readable registration benefits, requirements, and non-guarantees."}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_block","title":"Get Block","description":"Get block details (timestamp, gas used, base fee, miner, transaction count) for an Ethereum or Base block by number, hash, or 'latest'. Use to anchor events to a point in chain time.\n\nUse when: Use when a question depends on when a block occurred, how full it was, or its base fee — for example dating a transaction or checking congestion at a specific height. For current fee levels use get_gas_price instead.\n\nLimitations: One block per call; Ethereum mainnet and Base only. Historical base fee data depends on RPC node retention for older heights.\n\nAlternatives: get_transaction, get_gas_price","input_schema":{"type":"object","title":"mcp_get_blockArguments","properties":{"chain_id":{"type":"integer","title":"Chain Id","default":1,"description":"Chain ID (1=Ethereum, 8453=Base)"},"block_identifier":{"type":"string","title":"Block Identifier","default":"latest","description":"Block number, block hash, or 'latest'/'earliest'/'pending'"}}},"output_schema":{"type":"object","title":"GetBlockOutput","required":["number","hash","timestamp","transaction_count","gas_used","base_fee_gwei"],"properties":{"hash":{"type":"string","title":"Hash"},"number":{"type":"integer","title":"Number"},"gas_used":{"type":"integer","title":"Gas Used"},"timestamp":{"type":"integer","title":"Timestamp"},"base_fee_gwei":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Fee Gwei"},"transaction_count":{"type":"integer","title":"Transaction Count"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_chain_metrics","title":"Get Chain Metrics","description":"Compare blockchain ecosystem health via DeFiLlama: current TVL, 7/30-day TVL change, and aggregate fee activity. Pass chains such as ['Ethereum', 'Arbitrum', 'Solana'] for a focused comparison, or omit chains to inspect the highest-TVL ecosystems.\n\nUse when: Use for ecosystem-level comparisons — which chains are growing, where fee activity concentrates, or how a chain's TVL trended. For a single protocol's economics use get_protocol_tvl instead.\n\nLimitations: Third-party DeFiLlama analytics; historical and fee fields fail open (null) for uncovered chains. Not a real-time measure of chain throughput or security.\n\nAlternatives: get_protocol_tvl, get_dex_volume","input_schema":{"type":"object","title":"mcp_get_chain_metricsArguments","properties":{"days":{"type":"integer","title":"Days","default":30,"maximum":365,"minimum":7,"description":"Lookback window used when selecting the historical TVL points to inspect."},"limit":{"type":"integer","title":"Limit","default":20,"maximum":50,"minimum":1,"description":"Maximum number of chain rows to return when the result is not explicitly filtered."},"chains":{"anyOf":[{"type":"array","items":{"type":"string"},"maxItems":50},{"type":"null"}],"title":"Chains","default":null,"description":"Optional chain names to compare, such as ['Ethereum', 'Arbitrum', 'Solana']. When omitted, return the highest-TVL chains up to limit."}}},"output_schema":{"type":"object","$defs":{"DataProvenance":{"type":"object","title":"DataProvenance","required":["provider","retrieved_at"],"properties":{"provider":{"type":"string","title":"Provider"},"cache_hit":{"type":"boolean","title":"Cache Hit","default":false},"source_urls":{"type":"array","items":{"type":"string"},"title":"Source Urls"},"retrieved_at":{"type":"string","title":"Retrieved At"},"cache_age_seconds":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"title":"Cache Age Seconds","default":null},"cache_ttl_seconds":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Cache Ttl Seconds","default":null},"source_fetched_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Fetched At","default":null}},"description":"Machine-readable source and freshness metadata for a tool response."},"ChainMetricsEntry":{"type":"object","title":"ChainMetricsEntry","required":["chain","chain_id","token_symbol","tvl_usd","tvl_7d_change_pct","tvl_30d_change_pct","fees_24h_usd","fees_7d_usd","fees_30d_usd","fees_7d_change_pct","fees_30d_change_pct"],"properties":{"chain":{"type":"string","title":"Chain"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","default":null},"tvl_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tvl Usd"},"chain_id":{"anyOf":[{"type":"integer"},{"type":"string"},{"type":"null"}],"title":"Chain Id"},"error_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Type","default":null},"fees_7d_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fees 7D Usd"},"fees_24h_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fees 24H Usd"},"fees_30d_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fees 30D Usd"},"token_symbol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Symbol"},"tvl_7d_change_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tvl 7D Change Pct"},"fees_7d_change_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fees 7D Change Pct"},"tvl_30d_change_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tvl 30D Change Pct"},"fees_30d_change_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fees 30D Change Pct"}}}},"title":"GetChainMetricsOutput","required":["chains","requested_chains","total_available","note"],"properties":{"note":{"type":"string","title":"Note"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","default":null},"chains":{"type":"array","items":{"$ref":"#/$defs/ChainMetricsEntry"},"title":"Chains"},"error_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Type","default":null},"provenance":{"anyOf":[{"$ref":"#/$defs/DataProvenance"},{"type":"null"}],"default":null,"description":"Source and freshness metadata for the DeFiLlama response."},"total_available":{"type":"integer","title":"Total Available"},"requested_chains":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Requested Chains"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_datetime","title":"Get Datetime","description":"Return the current UTC date and time as a formatted string and ISO 8601 timestamp, for grounding time-relative reasoning in the actual clock rather than training-data assumptions.\n\nUse when: Use when a task must anchor on the current date or time — computing ages, windows, deadlines, or 'as of today' context. The runtime context block already states the date, so call this only when a specific strftime format or a precise timestamp is needed.\n\nLimitations: UTC only — no timezone conversion. An unsupported strftime format silently falls back to the default format instead of erroring.\n\nAlternatives: calculate, get_block","input_schema":{"type":"object","title":"mcp_get_datetimeArguments","properties":{"format":{"type":"string","title":"Format","default":"%Y-%m-%d %H:%M:%S UTC","maxLength":100,"description":"strftime format string for the output"}}},"output_schema":{"type":"object","title":"GetDatetimeOutput","required":["datetime","iso8601"],"properties":{"iso8601":{"type":"string","title":"Iso8601"},"datetime":{"type":"string","title":"Datetime"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_defi_positions","title":"Get Defi Positions","description":"Block-accurate DeFi positions for a wallet across Aave v3, Compound v3, Uniswap v3 LP, and Lido on Ethereum or Base. Returns Aave account health (collateral, debt, health factor, LTV) with per-reserve breakdown, Compound v3 market positions, Uniswap v3 LP positions by token ID, and on Ethereum the Lido stETH/wstETH balances with the current wstETH-to-stETH equivalent. Per-protocol failures are isolated — other protocols still return.\n\nUse when: Use when a block-accurate single-wallet protocol snapshot is needed, including health factor and LP position detail. For broad all-chain discovery or net worth across many protocols use get_wallet_positions instead.\n\nLimitations: On-chain RPC view of four protocol families on Ethereum and Base only; does not discover wallets' unknown or long-tail protocol positions. Compound v3 reports only a boolean liquidation flag — never state a numeric Compound health factor. Errors list which protocols were unavailable.\n\nAlternatives: get_wallet_positions, get_liquidation_risk, get_wallet_portfolio","input_schema":{"type":"object","title":"mcp_get_defi_positionsArguments","required":["wallet_address"],"properties":{"chain_id":{"type":"integer","title":"Chain Id","default":1,"description":"Chain ID (1=Ethereum, 8453=Base)"},"wallet_address":{"type":"string","title":"Wallet Address","description":"Wallet address (0x…)"}}},"output_schema":{"type":"object","$defs":{"AavePosition":{"type":"object","title":"AavePosition","required":["total_collateral_usd","total_debt_usd","available_borrows_usd","ltv_bps","liquidation_threshold_bps","health_factor","health_factor_status","reserves"],"properties":{"ltv_bps":{"type":"integer","title":"Ltv Bps"},"reserves":{"type":"array","items":{"$ref":"#/$defs/AaveReservePosition"},"title":"Reserves"},"health_factor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Health Factor"},"total_debt_usd":{"type":"number","title":"Total Debt Usd"},"health_factor_status":{"type":"string","title":"Health Factor Status"},"total_collateral_usd":{"type":"number","title":"Total Collateral Usd"},"available_borrows_usd":{"type":"number","title":"Available Borrows Usd"},"liquidation_threshold_bps":{"type":"integer","title":"Liquidation Threshold Bps"}}},"ProtocolErrorInfo":{"type":"object","title":"ProtocolErrorInfo","required":["protocol","error"],"properties":{"error":{"type":"string","title":"Error"},"protocol":{"type":"string","title":"Protocol"}}},"UniswapV3Position":{"type":"object","title":"UniswapV3Position","required":["token_id","token0_address","token1_address","fee_tier_raw","tick_lower","tick_upper","liquidity","tokens_owed_0","tokens_owed_1","status"],"properties":{"status":{"type":"string","title":"Status"},"token_id":{"type":"string","title":"Token Id"},"liquidity":{"type":"string","title":"Liquidity"},"tick_lower":{"type":"integer","title":"Tick Lower"},"tick_upper":{"type":"integer","title":"Tick Upper"},"fee_tier_raw":{"type":"integer","title":"Fee Tier Raw"},"token0_symbol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token0 Symbol","default":null},"token1_symbol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token1 Symbol","default":null},"tokens_owed_0":{"type":"string","title":"Tokens Owed 0"},"tokens_owed_1":{"type":"string","title":"Tokens Owed 1"},"token0_address":{"type":"string","title":"Token0 Address"},"token1_address":{"type":"string","title":"Token1 Address"}}},"CompoundCollateral":{"type":"object","title":"CompoundCollateral","required":["asset_address","amount"],"properties":{"amount":{"type":"string","title":"Amount"},"asset_address":{"type":"string","title":"Asset Address"},"borrow_collateral_factor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Borrow Collateral Factor","default":null},"liquidate_collateral_factor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Liquidate Collateral Factor","default":null}}},"AaveReservePosition":{"type":"object","title":"AaveReservePosition","required":["symbol","asset_address","supplied_amount","variable_debt_amount","stable_debt_amount","usage_as_collateral"],"properties":{"symbol":{"type":"string","title":"Symbol"},"asset_address":{"type":"string","title":"Asset Address"},"supplied_amount":{"type":"string","title":"Supplied Amount"},"stable_debt_amount":{"type":"string","title":"Stable Debt Amount"},"usage_as_collateral":{"type":"boolean","title":"Usage As Collateral"},"variable_debt_amount":{"type":"string","title":"Variable Debt Amount"}}},"LidoStakingPosition":{"type":"object","title":"LidoStakingPosition","required":["steth_balance","wsteth_balance","wsteth_steth_equivalent","total_steth_equivalent"],"properties":{"steth_balance":{"type":"string","title":"Steth Balance"},"wsteth_balance":{"type":"string","title":"Wsteth Balance"},"total_steth_equivalent":{"type":"string","title":"Total Steth Equivalent"},"wsteth_steth_equivalent":{"type":"string","title":"Wsteth Steth Equivalent"}}},"CompoundMarketPosition":{"type":"object","title":"CompoundMarketPosition","required":["market_name","market_address","base_asset_symbol","base_asset_address","supplied_amount","borrowed_amount","collateral","is_liquidatable"],"properties":{"collateral":{"type":"array","items":{"$ref":"#/$defs/CompoundCollateral"},"title":"Collateral"},"market_name":{"type":"string","title":"Market Name"},"market_address":{"type":"string","title":"Market Address"},"borrowed_amount":{"type":"string","title":"Borrowed Amount"},"is_liquidatable":{"type":"boolean","title":"Is Liquidatable"},"supplied_amount":{"type":"string","title":"Supplied Amount"},"base_asset_symbol":{"type":"string","title":"Base Asset Symbol"},"base_asset_address":{"type":"string","title":"Base Asset Address"}}}},"title":"GetDefiPositionsOutput","required":["wallet_address","chain_id","data_block_number"],"properties":{"note":{"type":"string","title":"Note","default":"On-chain position snapshot at data_block_number. Aave USD values are from the Aave oracle (base currency = USD, 8 decimals on Ethereum/Base). Compound collateral and Uniswap v3 amounts are raw integer units — divide by 10**decimals to format. Compound collateral factors are decimals (e.g., 0.90 = 90%) when available from Comet getAssetInfo. Token symbols are resolved for well-known tokens; None means unrecognised — do NOT call read_contract, web_search, or any external lookup to identify these tokens. Report them as 'unrecognized token (0x…)' in the final answer and move on. Uniswap v3 liquidity is returned raw (no underlying token valuation in v1); tokensOwed0/1 are uncollected fees only. Lido staking contains canonical Ethereum stETH/wstETH balances and a current wstETH-to-stETH equivalent in raw integer units; it does not include APR, rewards accounting, validator positions, or withdrawal queue status. Lido staking is null on Base because its wstETH representation there is bridged. If a protocol is missing (e.g., aave_v3 is null) and appears in errors, its risk could not be verified from this snapshot and must not be treated as no debt. Does not include COMP accruals or unlisted protocols."},"errors":{"type":"array","items":{"$ref":"#/$defs/ProtocolErrorInfo"},"title":"Errors"},"aave_v3":{"anyOf":[{"$ref":"#/$defs/AavePosition"},{"type":"null"}],"default":null},"chain_id":{"type":"integer","title":"Chain Id"},"uniswap_v3":{"type":"array","items":{"$ref":"#/$defs/UniswapV3Position"},"title":"Uniswap V3"},"compound_v3":{"type":"array","items":{"$ref":"#/$defs/CompoundMarketPosition"},"title":"Compound V3"},"lido_staking":{"anyOf":[{"$ref":"#/$defs/LidoStakingPosition"},{"type":"null"}],"default":null},"wallet_address":{"type":"string","title":"Wallet Address"},"data_block_number":{"type":"integer","title":"Data Block Number"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_dex_quote","title":"Get Dex Quote","description":"Get the best Uniswap v3 swap quote on Ethereum (chain_id=1) or Base (chain_id=8453) via direct on-chain QuoterV2 calls. Queries all four fee tiers (100/500/3000/10000 bps) in parallel and returns the tier with the highest output amount, along with per-tier breakdown. Inputs are raw uint256 amounts and EIP-55 checksummed addresses; native ETH is not quoted directly — pass the WETH address. Returns no_liquidity=true when no pool exists for the pair. Point-in-time quote at the returned block_number; do not cache.\n\nUse when: Choose when you need a best-execution Uniswap v3 swap quote on Ethereum or Base before executing a trade — e.g. price impact, output amount, or route selection.\n\nLimitations: Quotes raw uint256 amounts with EIP-55 checksummed addresses only; native ETH is not quoted directly (pass WETH). Point-in-time at the returned block_number — do not cache.\n\nAlternatives: get_token_price, get_dex_volume","input_schema":{"type":"object","title":"mcp_get_dex_quoteArguments","required":["token_in","token_out","amount_in"],"properties":{"chain_id":{"type":"integer","title":"Chain Id","default":1,"description":"1 = Ethereum mainnet, 8453 = Base mainnet. Other chains unsupported."},"token_in":{"type":"string","title":"Token In","description":"EIP-55 checksummed address of the token being sold. For native ETH, pass the WETH address (Ethereum: 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; Base: 0x4200000000000000000000000000000000000006)."},"amount_in":{"type":"string","title":"Amount In","description":"Input amount in RAW uint256 units (e.g. '1000000' for 1 USDC, '1000000000000000000' for 1 WETH). Must be > 0 and < 2^128. Common token decimals: WETH/ETH/DAI/wstETH/cbETH/weETH 18, WBTC/cbBTC 8, USDC/USDT 6. Do not call read_contract to look up decimals — use these values directly."},"token_out":{"type":"string","title":"Token Out","description":"EIP-55 checksummed address of the token being bought."}}},"output_schema":{"type":"object","$defs":{"TierQuote":{"type":"object","title":"TierQuote","required":["fee_tier","success"],"properties":{"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","default":null},"success":{"type":"boolean","title":"Success"},"fee_tier":{"type":"integer","title":"Fee Tier"},"amount_out":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Amount Out","default":null},"gas_estimate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gas Estimate","default":null},"sqrt_price_x96_after":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sqrt Price X96 After","default":null}}}},"title":"GetDexQuoteOutput","required":["chain_id","token_in","token_out","amount_in","amount_in_decimals","amount_out","amount_out_decimals","amount_out_human","effective_rate","fee_tier_used","quotes_per_tier","no_liquidity","block_number"],"properties":{"chain_id":{"type":"integer","title":"Chain Id"},"token_in":{"type":"string","title":"Token In"},"amount_in":{"type":"string","title":"Amount In"},"token_out":{"type":"string","title":"Token Out"},"amount_out":{"type":"string","title":"Amount Out"},"block_number":{"type":"integer","title":"Block Number"},"no_liquidity":{"type":"boolean","title":"No Liquidity"},"fee_tier_used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fee Tier Used"},"effective_rate":{"type":"string","title":"Effective Rate"},"quotes_per_tier":{"type":"array","items":{"$ref":"#/$defs/TierQuote"},"title":"Quotes Per Tier"},"amount_out_human":{"type":"string","title":"Amount Out Human"},"amount_in_decimals":{"type":"integer","title":"Amount In Decimals"},"amount_out_decimals":{"type":"integer","title":"Amount Out Decimals"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_dex_volume","title":"Get Dex Volume","description":"Compare decentralized exchange activity via DeFiLlama: 24h/7d/30-day volume, period-over-period changes, and each protocol's share of reported global 24-hour DEX volume. Filter by protocol and rank by a 1-, 7-, or 30-day lookback window.\n\nUse when: Use for landscape questions — which DEXs dominate volume, how activity shifted week-over-week, or a specific protocol's relative share. For executable swap pricing use get_dex_quote instead.\n\nLimitations: Third-party DeFiLlama reporting, not on-chain truth; coverage gaps understate smaller protocols. 24-hour share is computed against the unfiltered global total, so filtered results retain landscape context.\n\nAlternatives: get_dex_quote, get_chain_metrics","input_schema":{"type":"object","title":"mcp_get_dex_volumeArguments","properties":{"limit":{"type":"integer","title":"Limit","default":20,"maximum":50,"minimum":1,"description":"Maximum number of DEX protocols to return."},"protocols":{"anyOf":[{"type":"array","items":{"type":"string"},"maxItems":50},{"type":"null"}],"title":"Protocols","default":null,"description":"Optional protocol names or DeFiLlama slugs, such as ['uniswap-v3', 'curve-dex']. When omitted, return the largest DEX protocols."},"lookback_days":{"type":"integer","title":"Lookback Days","default":30,"maximum":30,"minimum":1,"description":"Window used to rank the returned protocols: 1, 7, or 30 days (nearest supported window is used)."}}},"output_schema":{"type":"object","$defs":{"DexVolumeEntry":{"type":"object","title":"DexVolumeEntry","required":["protocol","slug","category","volume_24h_usd","volume_7d_usd","volume_30d_usd","volume_7d_change_pct","volume_30d_change_pct","volume_share_pct","chains"],"properties":{"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","default":null},"chains":{"type":"array","items":{"type":"string"},"title":"Chains"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"protocol":{"type":"string","title":"Protocol"},"error_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Type","default":null},"volume_7d_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Volume 7D Usd"},"volume_24h_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Volume 24H Usd"},"volume_30d_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Volume 30D Usd"},"volume_share_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Volume Share Pct"},"volume_7d_change_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Volume 7D Change Pct"},"volume_30d_change_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Volume 30D Change Pct"}}}},"title":"GetDexVolumeOutput","required":["dexes","total_matching","total_available","volume_share_basis","note"],"properties":{"note":{"type":"string","title":"Note"},"dexes":{"type":"array","items":{"$ref":"#/$defs/DexVolumeEntry"},"title":"Dexes"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","default":null},"error_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Type","default":null},"total_matching":{"type":"integer","title":"Total Matching"},"total_available":{"type":"integer","title":"Total Available"},"volume_share_basis":{"type":"string","title":"Volume Share Basis"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_erc20_balance","title":"Get Erc20 Balance","description":"Get the exact on-chain ERC-20 balance of a wallet for one token contract, normalized by decimals and returned with the token's symbol. Use for a precise single-token check.\n\nUse when: Use when a specific token contract's balance must be verified block-accurately — e.g. confirming funds before an approval or transfer. For a multi-asset portfolio view use get_wallet_portfolio instead.\n\nLimitations: One token contract per call on Ethereum or Base; the contract address is required, so unknown tokens cannot be looked up by symbol. Returns raw balance data only — no USD valuation.\n\nAlternatives: get_wallet_portfolio, get_eth_balance","input_schema":{"type":"object","title":"mcp_get_erc20_balanceArguments","required":["wallet_address","token_address"],"properties":{"chain_id":{"type":"integer","title":"Chain Id","default":1,"description":"Chain ID (1=Ethereum, 8453=Base)"},"token_address":{"type":"string","title":"Token Address","description":"ERC-20 token contract address (0x…)"},"wallet_address":{"type":"string","title":"Wallet Address","description":"Wallet address (0x…)"}}},"output_schema":{"type":"object","title":"GetErc20BalanceOutput","required":["wallet_address","token_address","token_symbol","token_decimals","balance_raw","balance_formatted","chain_id"],"properties":{"chain_id":{"type":"integer","title":"Chain Id"},"balance_raw":{"type":"string","title":"Balance Raw"},"token_symbol":{"type":"string","title":"Token Symbol"},"token_address":{"type":"string","title":"Token Address"},"token_decimals":{"type":"integer","title":"Token Decimals"},"wallet_address":{"type":"string","title":"Wallet Address"},"balance_formatted":{"type":"string","title":"Balance Formatted"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_eth_balance","title":"Get Eth Balance","description":"Get the exact on-chain native ETH balance of an address on Ethereum or Base, in wei and ether. get_wallet_portfolio already includes native ETH in its holdings — call this only for a standalone balance without a portfolio scan.\n\nUse when: Use when a wallet's gas-availability or standalone ETH amount must be verified block-accurately. Do not call after or alongside get_wallet_portfolio — the holdings list already includes native ETH.\n\nLimitations: Native ETH only; ERC-20 balances require get_erc20_balance. Requires an EIP-55 checksummed address. Ethereum mainnet and Base only.\n\nAlternatives: get_wallet_portfolio, get_erc20_balance","input_schema":{"type":"object","title":"mcp_get_eth_balanceArguments","required":["address"],"properties":{"address":{"type":"string","title":"Address","description":"Ethereum address (0x…)"},"chain_id":{"type":"integer","title":"Chain Id","default":1,"description":"Chain ID (1=Ethereum, 8453=Base)"}}},"output_schema":{"type":"object","title":"GetEthBalanceOutput","required":["address","balance_wei","balance_eth","chain_id"],"properties":{"address":{"type":"string","title":"Address"},"chain_id":{"type":"integer","title":"Chain Id"},"balance_eth":{"type":"string","title":"Balance Eth"},"balance_wei":{"type":"string","title":"Balance Wei"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_gas_price","title":"Get Gas Price","description":"Get current EIP-1559 gas fees on Ethereum or Base: base fee, priority fee, next-block base fee estimate, and congestion (gas_used_ratio >0.5 busy, >0.9 very congested). Optional USD estimates cover a simple transfer and a swap-like transaction. Cached 10 seconds per chain.\n\nUse when: Use before advising a transaction — to time execution, size a gas budget, or judge congestion. Call once per decision; the 10-second cache makes rapid re-calls pointless.\n\nLimitations: Point-in-time estimate that changes every block; USD figures are rough heuristics at 21k/150k gas, not an execution quote. Ethereum mainnet and Base only.\n\nAlternatives: get_block, get_dex_quote","input_schema":{"type":"object","title":"mcp_get_gas_priceArguments","properties":{"chain_id":{"type":"integer","title":"Chain Id","default":1,"description":"Chain ID (1=Ethereum, 8453=Base)"},"include_usd_estimate":{"type":"boolean","title":"Include Usd Estimate","default":false,"description":"If true, include ETH spot price and rough USD cost estimates for a simple transfer (21k gas) and a swap-like transaction (150k gas)."}}},"output_schema":{"type":"object","title":"GetGasPriceOutput","required":["chain_id","gas_price_gwei","base_fee_gwei","priority_fee_gwei","next_base_fee_gwei","gas_used_ratio"],"properties":{"chain_id":{"type":"integer","title":"Chain Id"},"base_fee_gwei":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Fee Gwei"},"eth_price_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Eth Price Usd","default":null},"gas_price_gwei":{"type":"string","title":"Gas Price Gwei"},"gas_used_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gas Used Ratio"},"priority_fee_gwei":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority Fee Gwei"},"next_base_fee_gwei":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Base Fee Gwei"},"estimated_swap_cost_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Estimated Swap Cost Usd","default":null},"estimated_transfer_cost_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Estimated Transfer Cost Usd","default":null}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_lending_rates","title":"Get Lending Rates","description":"Get current on-chain lending supply/borrow APYs for Aave v3 reserves and Compound v3 markets on Ethereum or Base, with per-asset snapshots and Compound utilization. Use for protocol-specific yield comparisons such as USDC on Aave vs Compound.\n\nUse when: Use for protocol-specific lending-rate questions (e.g. 'Aave vs Compound USDC rates'). Prefer over get_yield_rates when the protocols are known; use get_yield_rates for broad pool discovery across many protocols. Do not fall back to web_search when this returns errors — report them.\n\nLimitations: On-chain snapshots of Aave v3 and Compound v3 on Ethereum and Base only; not a multi-protocol yield aggregator. Rates are point-in-time and change per block. Returns an errors list — report each unavailable protocol explicitly and treat empty rates with empty errors as transient RPC unavailability.\n\nAlternatives: get_yield_rates, get_defi_positions, get_liquidation_risk","input_schema":{"type":"object","title":"mcp_get_lending_ratesArguments","properties":{"assets":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Assets","default":null,"description":"Optional asset-symbol filter (e.g., ['USDC','DAI']). Case-insensitive. Max 20 symbols."},"chain_id":{"type":"integer","title":"Chain Id","default":1,"description":"Chain ID (1=Ethereum, 8453=Base)."},"protocol":{"enum":["all","aave-v3","compound-v3"],"type":"string","title":"Protocol","default":"all","description":"Protocol to query: 'aave-v3', 'compound-v3', or 'all'."}}},"output_schema":{"type":"object","$defs":{"LendingRateEntry":{"type":"object","title":"LendingRateEntry","required":["protocol","chain_id","market_name","asset_symbol","supply_apy_pct","borrow_apy_pct"],"properties":{"source":{"type":"string","const":"on-chain","title":"Source","default":"on-chain"},"chain_id":{"type":"integer","title":"Chain Id"},"protocol":{"enum":["aave-v3","compound-v3"],"type":"string","title":"Protocol"},"market_name":{"type":"string","title":"Market Name"},"asset_symbol":{"type":"string","title":"Asset Symbol"},"borrow_apy_pct":{"type":"number","title":"Borrow Apy Pct"},"supply_apy_pct":{"type":"number","title":"Supply Apy Pct"},"utilization_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Utilization Pct","default":null}}}},"title":"GetLendingRatesOutput","required":["protocol","chain_id","data_block_number","rates"],"properties":{"note":{"type":"string","title":"Note","default":"On-chain lending market snapshot at data_block_number. Aave rates are derived from ProtocolDataProvider.getReserveData (ray-scaled). Compound rates are derived from Comet getUtilization/getSupplyRate/getBorrowRate (per-second 1e18-scaled), annualized to APY."},"rates":{"type":"array","items":{"$ref":"#/$defs/LendingRateEntry"},"title":"Rates"},"errors":{"type":"array","items":{"type":"string"},"title":"Errors"},"chain_id":{"type":"integer","title":"Chain Id"},"protocol":{"type":"string","title":"Protocol"},"data_block_number":{"type":"integer","title":"Data Block Number"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_liquidation_risk","title":"Get Liquidation Risk","description":"Assess DeFi liquidation risk for up to 50 wallets across Aave v3 and Compound v3 on Ethereum or Base. Returns per-wallet health factor, tiered risk classification (liquidatable, critical, warning, caution, healthy, no_debt), and an overall_tier aggregate. Per-protocol failures are isolated — one protocol's RPC error does not blank the other's result.\n\nUse when: Use for multi-wallet batch risk assessment (2+ wallets). For a single-wallet DeFi analysis use get_defi_positions, which already includes risk metrics. Use assess_counterparty_risk when the question is counterparty trust rather than position health.\n\nLimitations: View-only scan of Aave v3 and Compound v3 on Ethereum and Base with hardcoded market addresses; not a liquidation simulation or guarantee. Compound v3 exposes only a boolean liquidation flag — no numeric health factor. Duplicate wallet addresses are silently removed.\n\nAlternatives: get_defi_positions, assess_counterparty_risk, get_wallet_positions","input_schema":{"type":"object","title":"mcp_get_liquidation_riskArguments","required":["wallet_addresses"],"properties":{"chain_id":{"type":"integer","title":"Chain Id","default":1,"description":"Chain ID (1=Ethereum, 8453=Base)"},"wallet_addresses":{"type":"array","items":{"type":"string"},"title":"Wallet Addresses","minItems":1,"description":"Wallet addresses to assess (max 50; duplicates are silently removed)."}}},"output_schema":{"type":"object","$defs":{"AaveRisk":{"type":"object","title":"AaveRisk","required":["health_factor","risk_tier","total_collateral_usd","total_debt_usd","liquidation_threshold_bps","ltv_bps"],"properties":{"ltv_bps":{"type":"integer","title":"Ltv Bps"},"risk_tier":{"type":"string","title":"Risk Tier"},"health_factor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Health Factor"},"total_debt_usd":{"type":"number","title":"Total Debt Usd"},"total_collateral_usd":{"type":"number","title":"Total Collateral Usd"},"liquidation_threshold_bps":{"type":"integer","title":"Liquidation Threshold Bps"}}},"RiskSummary":{"type":"object","title":"RiskSummary","required":["total_wallets","liquidatable_count","critical_count","warning_count","caution_count","healthy_count","no_debt_count"],"properties":{"caution_count":{"type":"integer","title":"Caution Count"},"healthy_count":{"type":"integer","title":"Healthy Count"},"no_debt_count":{"type":"integer","title":"No Debt Count"},"total_wallets":{"type":"integer","title":"Total Wallets"},"warning_count":{"type":"integer","title":"Warning Count"},"critical_count":{"type":"integer","title":"Critical Count"},"liquidatable_count":{"type":"integer","title":"Liquidatable Count"}}},"CompoundRisk":{"type":"object","title":"CompoundRisk","required":["market_name","market_address","base_asset_symbol","is_liquidatable","borrow_balance_raw","risk_tier"],"properties":{"risk_tier":{"type":"string","title":"Risk Tier"},"market_name":{"type":"string","title":"Market Name"},"market_address":{"type":"string","title":"Market Address"},"is_liquidatable":{"type":"boolean","title":"Is Liquidatable"},"base_asset_symbol":{"type":"string","title":"Base Asset Symbol"},"borrow_balance_raw":{"type":"string","title":"Borrow Balance Raw"}}},"WalletRiskResult":{"type":"object","title":"WalletRiskResult","required":["wallet_address","chain_id","overall_tier"],"properties":{"aave":{"anyOf":[{"$ref":"#/$defs/AaveRisk"},{"type":"null"}],"default":null},"errors":{"type":"array","items":{"$ref":"#/$defs/ProtocolErrorInfo"},"title":"Errors"},"chain_id":{"type":"integer","title":"Chain Id"},"compound":{"type":"array","items":{"$ref":"#/$defs/CompoundRisk"},"title":"Compound"},"overall_tier":{"type":"string","title":"Overall Tier"},"wallet_address":{"type":"string","title":"Wallet Address"}}},"ProtocolErrorInfo":{"type":"object","title":"ProtocolErrorInfo","required":["protocol","error"],"properties":{"error":{"type":"string","title":"Error"},"protocol":{"type":"string","title":"Protocol"}}}},"title":"GetLiquidationRiskOutput","required":["chain_id","data_block_number","results","summary"],"properties":{"note":{"type":"string","title":"Note","default":"On-chain liquidation-risk snapshot at data_block_number. Aave risk_tier is derived from the numeric health factor: liquidatable (<1.0), critical (<1.05), warning (<1.15), caution (<1.5), healthy (≥1.5). Compound v3 exposes only a boolean isLiquidatable — a numeric health factor is not available from this tool; do not attempt to compute, estimate, or infer it via additional tool calls. Do not infer a Compound liquidation or breach price from this output. overall_tier is the worst tier across protocols for each wallet. Aave USD values are base-currency 8-decimal from the Aave oracle. Duplicate wallet addresses in the request are deduplicated silently."},"results":{"type":"array","items":{"$ref":"#/$defs/WalletRiskResult"},"title":"Results"},"summary":{"$ref":"#/$defs/RiskSummary"},"chain_id":{"type":"integer","title":"Chain Id"},"data_block_number":{"type":"integer","title":"Data Block Number"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_protocol_tvl","title":"Get Protocol Tvl","description":"Get Total Value Locked for one or many DeFi protocols from DeFiLlama: current USD TVL, 7/30-day change, fees and revenue when reported, per-chain breakdown, and optional daily historical series. Batch multiple protocols via protocols=[...] — batch responses return one compact economic summary per protocol; single-protocol calls add chain and historical detail. Supports 3,000+ protocols; use DeFiLlama slugs ('aave-v3', 'uniswap-v3'); common aliases are auto-corrected.\n\nUse when: Use for protocol-level economic questions — size, growth, fees, or revenue of a specific protocol. For 2+ protocols always batch in one call rather than calling per-protocol. Pass include_historical=true with days when a trend is needed; without it the response is a current TVL scalar. For ecosystem-level chain comparisons use get_chain_metrics instead.\n\nLimitations: Third-party DeFiLlama analytics, not on-chain truth. Upstream revenue failures surface as revenue_error_type and null economic fields are data gaps — never fabricate values for them.\n\nAlternatives: get_chain_metrics, get_yield_rates, get_dex_volume","input_schema":{"type":"object","title":"mcp_get_protocol_tvlArguments","properties":{"days":{"type":"integer","title":"Days","default":30,"maximum":365,"minimum":1,"description":"Lookback window in days for the historical series (only used when include_historical=True)."},"protocol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol","default":null,"description":"DeFiLlama protocol slug (e.g. 'aave-v3', 'uniswap-v3', 'curve-dex'). Use lowercase with hyphens as shown on DeFiLlama. Tip: 'aave' works for the combined Aave TVL; 'aave-v3' for V3 only. Optional when using batch mode via protocols=[...]."},"protocols":{"type":"array","items":{"type":"string"},"title":"Protocols","default":[],"description":"Optional batch mode: list of DeFiLlama protocol slugs. When provided, the tool returns one TVL result object per protocol."},"include_historical":{"type":"boolean","title":"Include Historical","default":false,"description":"If true, return a daily historical TVL series for the requested window."}}},"output_schema":null,"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_token_approvals","title":"Get Token Approvals","description":"Block-accurate audit of ERC-20 allowances for a wallet across curated DeFi spenders (Uniswap, Aave, Compound, 1inch, 0x, OpenSea) on Ethereum or Base. Flags unlimited approvals by risk level (high=unknown spender, medium=trusted protocol, low=bounded). Use before swaps or after security incidents to detect active exploit vectors.\n\nUse when: Use for a free, block-accurate Ethereum/Base check of an address's exposure to the curated spender list. For broad all-chain spender discovery, hacked/abandoned flags, or NFT-adjacent exposure use get_wallet_approvals instead.\n\nLimitations: Covers only the tracked-asset registry and curated spenders — untracked tokens and custom spenders are excluded. Does not inspect NFT approvals or off-chain Permit2 sub-permits. An error field marks results as incomplete rather than clean.\n\nAlternatives: get_wallet_approvals, assess_counterparty_risk","input_schema":{"type":"object","title":"mcp_get_token_approvalsArguments","required":["wallet_address"],"properties":{"tokens":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Tokens","default":null,"description":"Token contract addresses to check (max 50). Defaults to the platform tracked token list."},"chain_id":{"type":"integer","title":"Chain Id","default":1,"description":"Chain ID (1=Ethereum, 8453=Base)"},"spenders":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Spenders","default":null,"description":"Spender contract addresses to check (max 20). Defaults to the curated DeFi protocol list."},"wallet_address":{"type":"string","title":"Wallet Address","description":"Wallet address (0x…)"}}},"output_schema":{"type":"object","$defs":{"RiskSummary":{"type":"object","title":"RiskSummary","required":["total_approvals","unlimited_approvals","high_risk_approvals","unknown_spenders"],"properties":{"total_approvals":{"type":"integer","title":"Total Approvals"},"unknown_spenders":{"type":"integer","title":"Unknown Spenders"},"high_risk_approvals":{"type":"integer","title":"High Risk Approvals"},"unlimited_approvals":{"type":"integer","title":"Unlimited Approvals"}}},"ApprovalEntry":{"type":"object","title":"ApprovalEntry","required":["token_symbol","token_address","spender_name","spender_address","allowance_raw","allowance_formatted","is_unlimited","is_permit2","risk_level"],"properties":{"is_permit2":{"type":"boolean","title":"Is Permit2"},"risk_level":{"enum":["low","medium","high"],"type":"string","title":"Risk Level"},"is_unlimited":{"type":"boolean","title":"Is Unlimited"},"spender_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Spender Name"},"token_symbol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Symbol"},"allowance_raw":{"type":"string","title":"Allowance Raw"},"token_address":{"type":"string","title":"Token Address"},"spender_address":{"type":"string","title":"Spender Address"},"allowance_formatted":{"type":"string","title":"Allowance Formatted"}}}},"title":"GetTokenApprovalsOutput","required":["wallet_address","chain_id","approvals","risk_summary","note"],"properties":{"note":{"type":"string","title":"Note"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","default":null},"chain_id":{"type":"integer","title":"Chain Id"},"approvals":{"type":"array","items":{"$ref":"#/$defs/ApprovalEntry"},"title":"Approvals"},"risk_summary":{"$ref":"#/$defs/RiskSummary"},"wallet_address":{"type":"string","title":"Wallet Address"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_token_price","title":"Get Token Price","description":"Get current price, 24h change, market cap, FDV, and volume for one or more crypto tokens. Accepts ticker symbols, full names, or CoinGecko IDs; unknown symbols resolve automatically. Batch up to 50 tokens. Reuse price_usd/value_usd already returned by get_wallet_portfolio instead of re-calling.\n\nUse when: Use for spot pricing of named tokens — including batched multi-token queries. Do not call for tokens whose price get_wallet_portfolio already returned, or for address-only unknown tokens (report them as unrecognized). For historical windows use get_token_price_historical.\n\nLimitations: CoinGecko spot data; point-in-time and not an executable swap quote. Bare 0x addresses are not resolvable and should be treated as unknown tokens.\n\nAlternatives: get_token_price_historical, get_wallet_portfolio, get_dex_quote","input_schema":{"type":"object","title":"mcp_get_token_priceArguments","required":["tokens"],"properties":{"tokens":{"type":"array","items":{"type":"string"},"title":"Tokens","maxItems":50,"minItems":1,"description":"Token symbols or CoinGecko IDs (e.g. ['BTC', 'ETH', 'SOL'])"},"vs_currency":{"type":"string","title":"Vs Currency","default":"usd","description":"Quote currency (usd, eur, gbp, btc, eth)"}}},"output_schema":{"type":"object","$defs":{"TokenPriceEntry":{"type":"object","title":"TokenPriceEntry","required":["id","symbol","price","market_cap","volume_24h","change_24h_pct"],"properties":{"id":{"type":"string","title":"Id"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"symbol":{"type":"string","title":"Symbol"},"market_cap":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Market Cap"},"volume_24h":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Volume 24H"},"change_24h_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Change 24H Pct"},"fully_diluted_valuation":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fully Diluted Valuation","default":null}}}},"title":"GetTokenPriceOutput","required":["vs_currency","prices"],"properties":{"prices":{"type":"array","items":{"$ref":"#/$defs/TokenPriceEntry"},"title":"Prices"},"vs_currency":{"type":"string","title":"Vs Currency"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_token_price_historical","title":"Get Token Price Historical","description":"Get historical crypto prices over a 1–365 day window: period statistics (start, end, % change, high, low), a downsampled daily series, high_30d, std_30d, and dca_baseline_90d. Use for period comparisons and trend analysis; prefer over web_search for time-comparative financial queries. Pass stats_only=true when the daily series is unnecessary.\n\nUse when: Use for time-comparative financial questions — month-over-month, YTD, volatility, or DCA baselines. Prefer over web_search for such queries. Use the pre-computed stats directly; do not re-derive them with calculate.\n\nLimitations: Daily granularity (downsampled), max 365-day window, CoinGecko coverage only. Check dca_baseline_90d_partial before relying on the baseline — incomplete history yields a partial baseline.\n\nAlternatives: get_token_price, web_search","input_schema":{"type":"object","title":"mcp_get_token_price_historicalArguments","required":["tokens"],"properties":{"days":{"type":"integer","title":"Days","default":30,"maximum":365,"minimum":1,"description":"Lookback window in days (1–365). 1=5-min granularity, 2-90=hourly, 91+=daily."},"tokens":{"type":"array","items":{"type":"string"},"title":"Tokens","maxItems":10,"minItems":1,"description":"Token symbols or CoinGecko IDs (e.g. ['BTC', 'ETH']). Max 10 per call."},"stats_only":{"type":"boolean","title":"Stats Only","default":false,"description":"If true, omit the daily price series and return period stats plus precomputed 30-day high/volatility and 90-day DCA baseline metrics."},"vs_currency":{"type":"string","title":"Vs Currency","default":"usd","pattern":"^[a-z]{3,10}$","description":"Quote currency (usd, eur, gbp, btc, eth). Lowercase 3–10 letters."}}},"output_schema":{"type":"object","$defs":{"DailyPricePoint":{"type":"object","title":"DailyPricePoint","required":["date","price"],"properties":{"date":{"type":"string","title":"Date"},"price":{"type":"number","title":"Price"}}},"TokenHistoricalEntry":{"type":"object","title":"TokenHistoricalEntry","required":["id","symbol","price_start","price_end","price_change_pct","price_high","price_low","daily_prices"],"properties":{"id":{"type":"string","title":"Id"},"symbol":{"type":"string","title":"Symbol"},"std_30d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Std 30D","default":null,"description":"Population standard deviation of trailing 30-day simple daily returns, as a decimal."},"high_30d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"High 30D","default":null,"description":"Maximum raw price observation in the trailing 30 UTC days, in vs_currency."},"price_end":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price End"},"price_low":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Low"},"price_high":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price High"},"price_start":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Start"},"daily_prices":{"type":"array","items":{"$ref":"#/$defs/DailyPricePoint"},"title":"Daily Prices"},"dca_baseline_90d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dca Baseline 90D","default":null,"description":"Mean of weekly daily-close samples from the preceding 90 UTC days, in vs_currency."},"price_change_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Change Pct"},"dca_baseline_90d_partial":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Dca Baseline 90D Partial","default":null,"description":"True when the DCA baseline uses incomplete 90-day history; null when unavailable."}}}},"title":"GetTokenPriceHistoricalOutput","required":["vs_currency","days","tokens"],"properties":{"days":{"type":"integer","title":"Days"},"tokens":{"type":"array","items":{"$ref":"#/$defs/TokenHistoricalEntry"},"title":"Tokens"},"vs_currency":{"type":"string","title":"Vs Currency"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_transaction","title":"Get Transaction","description":"Get details and receipt for one Ethereum or Base transaction by hash: bounded calldata, normalized event logs, transaction index, and receipt-derived effective gas price and fee when available. Use to verify a specific transaction's status and outcome.\n\nUse when: Use when one known transaction must be verified — status, logs, gas paid, or execution outcome. To understand what the calldata means use decode_transaction; for wallet-wide activity use get_wallet_history.\n\nLimitations: One transaction hash per call on Ethereum or Base; pending transactions may not resolve yet. Calldata is returned bounded, not decoded — use decode_transaction for semantic decoding.\n\nAlternatives: decode_transaction, get_block, get_wallet_history","input_schema":{"type":"object","title":"mcp_get_transactionArguments","required":["tx_hash"],"properties":{"tx_hash":{"type":"string","title":"Tx Hash","description":"Transaction hash (0x…)"},"chain_id":{"type":"integer","title":"Chain Id","default":1,"description":"Chain ID (1=Ethereum, 8453=Base)"}}},"output_schema":{"type":"object","$defs":{"TransactionLog":{"type":"object","title":"TransactionLog","required":["address","topics","data"],"properties":{"data":{"type":"string","title":"Data"},"topics":{"type":"array","items":{"type":"string"},"title":"Topics"},"address":{"type":"string","title":"Address"},"log_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Log Index","default":null},"data_truncated":{"type":"boolean","title":"Data Truncated","default":false},"topics_truncated":{"type":"boolean","title":"Topics Truncated","default":false}}}},"title":"GetTransactionOutput","required":["tx_hash","from_address","to_address","value_eth","gas_used","gas_price_gwei","block_number","chain_id"],"properties":{"logs":{"type":"array","items":{"$ref":"#/$defs/TransactionLog"},"title":"Logs"},"status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status","default":null,"description":"1=success, 0=revert, None=pending"},"fee_eth":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fee Eth","default":null},"fee_wei":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fee Wei","default":null},"tx_hash":{"type":"string","title":"Tx Hash"},"chain_id":{"type":"integer","title":"Chain Id"},"gas_used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gas Used"},"value_eth":{"type":"string","title":"Value Eth"},"input_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Data","default":null,"description":"Hex calldata, bounded to 8 KiB"},"to_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Address"},"block_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Block Number"},"from_address":{"type":"string","title":"From Address"},"gas_price_gwei":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gas Price Gwei"},"logs_truncated":{"type":"boolean","title":"Logs Truncated","default":false},"transaction_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Transaction Index","default":null},"input_data_truncated":{"type":"boolean","title":"Input Data Truncated","default":false},"effective_gas_price_gwei":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Gas Price Gwei","default":null}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_wallet_approvals","title":"Get Wallet Approvals","description":"Inspect a wallet's current ERC-20 token authorization exposure on one DeBank-supported chain. Returns discovered spenders, USD exposure, protocol attribution, and hacked or abandoned protocol flags. This is broader than the curated block-accurate get_token_approvals tool.\n\nUse when: Use when broad spender discovery or cross-chain security screening is needed. Call once per chain because DeBank requires a chain_id. Use get_token_approvals for a free, block-accurate Ethereum or Base scan of curated tokens and spenders.\n\nLimitations: The result is third-party analytics and may be stale. It covers token approvals only, not NFT approvals or off-chain Permit2 sub-permits; each chain consumes a separate billable provider call.\n\nAlternatives: get_token_approvals","input_schema":{"type":"object","title":"mcp_get_wallet_approvalsArguments","required":["wallet_address","chain_id"],"properties":{"chain_id":{"type":"string","title":"Chain Id","description":"DeBank chain identifier, for example eth, arb, or base"},"wallet_address":{"type":"string","title":"Wallet Address","description":"EVM wallet address (0x-prefixed)"}}},"output_schema":{"type":"object","$defs":{"DataProvenance":{"type":"object","title":"DataProvenance","required":["provider","retrieved_at"],"properties":{"provider":{"type":"string","title":"Provider"},"cache_hit":{"type":"boolean","title":"Cache Hit","default":false},"source_urls":{"type":"array","items":{"type":"string"},"title":"Source Urls"},"retrieved_at":{"type":"string","title":"Retrieved At"},"cache_age_seconds":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"title":"Cache Age Seconds","default":null},"cache_ttl_seconds":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Cache Ttl Seconds","default":null},"source_fetched_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Fetched At","default":null}},"description":"Machine-readable source and freshness metadata for a tool response."},"WalletApprovalToken":{"type":"object","title":"WalletApprovalToken","required":["id"],"properties":{"id":{"type":"string","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","default":null},"chain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chain","default":null},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price","default":null},"symbol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Symbol","default":null},"balance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Balance","default":null},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","default":null},"spenders":{"type":"array","items":{"$ref":"#/$defs/WalletApprovalSpender"},"title":"Spenders"},"exposure_balance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Exposure Balance","default":null},"sum_exposure_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sum Exposure Usd","default":null}}},"WalletApprovalsError":{"type":"object","title":"WalletApprovalsError","required":["operation","error_type","message"],"properties":{"message":{"type":"string","title":"Message"},"operation":{"type":"string","title":"Operation"},"error_type":{"type":"string","title":"Error Type"}}},"WalletApprovalSpender":{"type":"object","title":"WalletApprovalSpender","required":["id"],"properties":{"id":{"type":"string","title":"Id"},"value":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Value","default":null},"protocol":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Protocol","default":null},"is_hacked":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Hacked","default":null},"is_contract":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Contract","default":null},"exposure_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Exposure Usd","default":null},"is_abandoned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Abandoned","default":null},"is_open_source":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Open Source","default":null}}}},"title":"GetWalletApprovalsOutput","required":["wallet_address","chain_id","data_complete","provenance"],"properties":{"note":{"type":"string","title":"Note","default":"DeBank authorization exposure is analytics data for one chain and may be stale. It does not inspect NFT approvals or off-chain Permit2 sub-permits."},"errors":{"type":"array","items":{"$ref":"#/$defs/WalletApprovalsError"},"title":"Errors"},"chain_id":{"type":"string","title":"Chain Id"},"approvals":{"type":"array","items":{"$ref":"#/$defs/WalletApprovalToken"},"title":"Approvals"},"provenance":{"$ref":"#/$defs/DataProvenance"},"data_complete":{"type":"boolean","title":"Data Complete"},"wallet_address":{"type":"string","title":"Wallet Address"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_wallet_history","title":"Get Wallet History","description":"Get one page of decoded transaction history for an EVM wallet across DeBank-supported chains. Returns send, receive, and approval categories with protocol, token, exchange, gas, and USD metadata. Use the returned next_cursor as start_time to page backward.\n\nUse when: Use for wallet activity discovery, protocol interaction history, exchange exposure, and gas analysis. Page backward with next_cursor for older activity. Use get_transaction or decode_transaction when one known transaction needs block-level details.\n\nLimitations: DeBank returns at most 20 entries per call and the data may be stale. This tool is not a complete ledger, PnL engine, or cost-basis calculator because historical execution prices and all transfer semantics are not guaranteed.\n\nAlternatives: get_transaction, decode_transaction","input_schema":{"type":"object","title":"mcp_get_wallet_historyArguments","required":["wallet_address"],"properties":{"chain_ids":{"anyOf":[{"type":"array","items":{"type":"string"},"maxItems":50},{"type":"null"}],"title":"Chain Ids","default":null,"description":"Optional DeBank chain identifiers; omit to query all supported chains."},"page_count":{"type":"integer","title":"Page Count","default":20,"maximum":20,"minimum":1,"description":"Number of history entries to request (maximum 20)."},"start_time":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Start Time","default":null,"description":"Return entries earlier than this Unix timestamp for cursor pagination."},"wallet_address":{"type":"string","title":"Wallet Address","description":"EVM wallet address (0x-prefixed)"}}},"output_schema":{"type":"object","$defs":{"DataProvenance":{"type":"object","title":"DataProvenance","required":["provider","retrieved_at"],"properties":{"provider":{"type":"string","title":"Provider"},"cache_hit":{"type":"boolean","title":"Cache Hit","default":false},"source_urls":{"type":"array","items":{"type":"string"},"title":"Source Urls"},"retrieved_at":{"type":"string","title":"Retrieved At"},"cache_age_seconds":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"title":"Cache Age Seconds","default":null},"cache_ttl_seconds":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Cache Ttl Seconds","default":null},"source_fetched_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Fetched At","default":null}},"description":"Machine-readable source and freshness metadata for a tool response."},"WalletHistoryError":{"type":"object","title":"WalletHistoryError","required":["operation","error_type","message"],"properties":{"message":{"type":"string","title":"Message"},"operation":{"type":"string","title":"Operation"},"error_type":{"type":"string","title":"Error Type"}}}},"title":"GetWalletHistoryOutput","required":["wallet_address","chain_ids","start_time","page_count","data_complete","provenance"],"properties":{"note":{"type":"string","title":"Note","default":"This is one page of DeBank's decoded activity history. It supports activity and gas analysis, but does not provide complete PnL or cost basis without historical execution prices."},"errors":{"type":"array","items":{"$ref":"#/$defs/WalletHistoryError"},"title":"Errors"},"cex_dict":{"type":"object","title":"Cex Dict","additionalProperties":{"type":"object","additionalProperties":true}},"has_more":{"type":"boolean","title":"Has More","default":false},"chain_ids":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Chain Ids"},"page_count":{"type":"integer","title":"Page Count"},"provenance":{"$ref":"#/$defs/DataProvenance"},"start_time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Start Time"},"token_dict":{"type":"object","title":"Token Dict","additionalProperties":{"type":"object","additionalProperties":true}},"next_cursor":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next Cursor","default":null},"history_list":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"History List"},"project_dict":{"type":"object","title":"Project Dict","additionalProperties":{"type":"object","additionalProperties":true}},"data_complete":{"type":"boolean","title":"Data Complete"},"wallet_address":{"type":"string","title":"Wallet Address"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_wallet_portfolio","title":"Get Wallet Portfolio","description":"Get aggregated token holdings with USD values for a wallet address. Tracks 19 major assets on Ethereum and 12 on Base, including spot, lending, liquid-staking, restaking, and stablecoin assets. Sorted by USD value. Returns up to 20 holdings. Includes native ETH balance in the holdings list — calling get_eth_balance separately after this is redundant.\n\nUse when: Choose when you need a wallet's overall token exposure and USD value on Ethereum or Base in one call. Call once per chain for a cross-chain comparison.\n\nLimitations: Tracks a fixed set of major assets per chain, not arbitrary tokens. Returns up to 20 holdings. Native ETH is included, so calling get_eth_balance separately is redundant.\n\nAlternatives: get_eth_balance, get_token_price, get_defi_positions","input_schema":{"type":"object","title":"mcp_get_wallet_portfolioArguments","required":["wallet_address"],"properties":{"chain_id":{"type":"integer","title":"Chain Id","default":1,"description":"Chain ID (1=Ethereum, 8453=Base)"},"wallet_address":{"type":"string","title":"Wallet Address","description":"Wallet address (0x…)"}}},"output_schema":{"type":"object","$defs":{"PortfolioEntry":{"type":"object","title":"PortfolioEntry","required":["symbol","token_address","balance_formatted","price_usd","value_usd"],"properties":{"symbol":{"type":"string","title":"Symbol"},"price_usd":{"type":"number","title":"Price Usd"},"value_usd":{"type":"number","title":"Value Usd"},"token_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Address"},"balance_formatted":{"type":"string","title":"Balance Formatted"}}}},"title":"GetWalletPortfolioOutput","required":["wallet_address","chain_id","total_value_usd","holdings"],"properties":{"note":{"type":"string","title":"Note","default":"Only tracked tokens shown. Untracked tokens not included."},"chain_id":{"type":"integer","title":"Chain Id"},"holdings":{"type":"array","items":{"$ref":"#/$defs/PortfolioEntry"},"title":"Holdings"},"fetch_errors":{"type":"array","items":{"type":"string"},"title":"Fetch Errors"},"wallet_address":{"type":"string","title":"Wallet Address"},"total_value_usd":{"type":"number","title":"Total Value Usd"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_wallet_positions","title":"Get Wallet Positions","description":"Get a wallet's DeFi positions across all DeBank-supported chains and protocols. Returns protocol-level positions, asset/debt/net USD values, optional token lists, aggregate exposure, and optional all-chain net worth. Set include_token_balances=true to also return DeBank's complete cross-chain wallet token list. Set include_token_lists=false for a compact balance and debt summary without nested position tokens. This covers substantially more protocols and chains than the block-accurate get_defi_positions tool. Use raw-RPC tools for liquidation, swap quotes, or other transaction-critical questions.\n\nUse when: Use for broad wallet discovery, portfolio allocation, protocol exposure, or cross-chain position questions. Set include_token_balances=true when complete wallet token discovery is required; otherwise the response only includes tokens attached to protocol positions. Set include_token_lists=false when only protocol balances, debt, or aggregate exposure are needed. Use get_defi_positions when the user needs a block-accurate Aave, Compound, Uniswap, or Lido snapshot.\n\nLimitations: DeBank portfolio data is third-party analytics and may be stale, including occasional long refresh delays. It is read-only, EVM wallet oriented, and does not prove current liquidation or execution state. include_token_balances adds a separate billable DeBank request; include_token_lists only changes response detail.\n\nAlternatives: get_defi_positions, get_wallet_portfolio, get_token_approvals","input_schema":{"type":"object","title":"mcp_get_wallet_positionsArguments","required":["wallet_address"],"properties":{"wallet_address":{"type":"string","title":"Wallet Address","description":"EVM wallet address (0x…)"},"include_net_worth":{"type":"boolean","title":"Include Net Worth","default":true,"description":"Include all-chain net worth and per-chain balances; disable to avoid that additional provider request."},"include_token_lists":{"type":"boolean","title":"Include Token Lists","default":true,"description":"Include protocol position token lists; disable for a compact balance and debt summary."},"include_token_balances":{"type":"boolean","title":"Include Token Balances","default":false,"description":"Include DeBank's complete cross-chain token balance list; adds a billable provider request."}}},"output_schema":{"type":"object","$defs":{"WalletToken":{"type":"object","title":"WalletToken","required":["token_id"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","default":null},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount","default":null},"symbol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Symbol","default":null},"chain_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chain Id","default":null},"decimals":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Decimals","default":null},"token_id":{"type":"string","title":"Token Id"},"price_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Usd","default":null},"usd_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Usd Value","default":null},"raw_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Amount","default":null},"is_verified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Verified","default":null},"protocol_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol Id","default":null},"display_symbol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Symbol","default":null}}},"DataProvenance":{"type":"object","title":"DataProvenance","required":["provider","retrieved_at"],"properties":{"provider":{"type":"string","title":"Provider"},"cache_hit":{"type":"boolean","title":"Cache Hit","default":false},"source_urls":{"type":"array","items":{"type":"string"},"title":"Source Urls"},"retrieved_at":{"type":"string","title":"Retrieved At"},"cache_age_seconds":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"title":"Cache Age Seconds","default":null},"cache_ttl_seconds":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Cache Ttl Seconds","default":null},"source_fetched_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Fetched At","default":null}},"description":"Machine-readable source and freshness metadata for a tool response."},"WalletChainBalance":{"type":"object","title":"WalletChainBalance","required":["chain_id"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","default":null},"chain_id":{"type":"string","title":"Chain Id"},"usd_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Usd Value","default":null},"community_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Community Id","default":null}}},"WalletPositionItem":{"type":"object","title":"WalletPositionItem","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","default":null},"update_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Update At","default":null},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","default":null},"token_lists":{"type":"object","title":"Token Lists","description":"Protocol-specific token lists keyed by their DeBank detail field.","additionalProperties":{"type":"array","items":{"$ref":"#/$defs/WalletToken"}}},"detail_types":{"type":"array","items":{"type":"string"},"title":"Detail Types"},"net_usd_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Net Usd Value","default":null},"debt_usd_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Debt Usd Value","default":null},"asset_usd_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Asset Usd Value","default":null}}},"WalletPositionsError":{"type":"object","title":"WalletPositionsError","required":["operation","error_type","message"],"properties":{"message":{"type":"string","title":"Message"},"operation":{"type":"string","title":"Operation"},"error_type":{"type":"string","title":"Error Type"}}},"WalletProtocolPosition":{"type":"object","title":"WalletProtocolPosition","required":["protocol_id"],"properties":{"items":{"type":"array","items":{"$ref":"#/$defs/WalletPositionItem"},"title":"Items"},"chain_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chain Id","default":null},"site_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Url","default":null},"protocol_id":{"type":"string","title":"Protocol Id"},"protocol_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Protocol Name","default":null},"protocol_tvl_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Protocol Tvl Usd","default":null},"has_supported_portfolio":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Supported Portfolio","default":null}}}},"title":"GetWalletPositionsOutput","required":["wallet_address","include_net_worth","include_token_balances","include_token_lists","data_complete","provenance"],"properties":{"note":{"type":"string","title":"Note","default":"Positions are sourced from DeBank Cloud portfolio analytics and may be stale; they are not block-accurate. staleness_seconds reports the oldest underlying position update. Use get_defi_positions or other raw-RPC tools for liquidation, quote, and transaction-critical checks."},"errors":{"type":"array","items":{"$ref":"#/$defs/WalletPositionsError"},"title":"Errors"},"positions":{"type":"array","items":{"$ref":"#/$defs/WalletProtocolPosition"},"title":"Positions"},"provenance":{"$ref":"#/$defs/DataProvenance"},"data_complete":{"type":"boolean","title":"Data Complete"},"total_net_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Net Usd","default":null},"chain_balances":{"type":"array","items":{"$ref":"#/$defs/WalletChainBalance"},"title":"Chain Balances"},"token_balances":{"type":"array","items":{"$ref":"#/$defs/WalletToken"},"title":"Token Balances"},"total_debt_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Debt Usd","default":null},"wallet_address":{"type":"string","title":"Wallet Address"},"total_asset_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Asset Usd","default":null},"include_net_worth":{"type":"boolean","title":"Include Net Worth"},"staleness_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Staleness Seconds","default":null,"description":"Max age in seconds of the underlying DeBank position data (from per-item update_at), or None when unavailable."},"include_token_lists":{"type":"boolean","title":"Include Token Lists"},"total_net_worth_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Net Worth Usd","default":null},"include_token_balances":{"type":"boolean","title":"Include Token Balances"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"get_yield_rates","title":"Get Yield Rates","description":"Get DeFi yield pool rates from DeFiLlama across 1,000+ protocols and all chains: pools sorted by APY with TVL, base/reward APY, and 7d/30d mean APY context, filterable by protocol, chain, min TVL, min/max APY, and symbol. Returns up to 50 pools. For protocol-specific lending comparisons (Aave vs Compound) prefer get_lending_rates.\n\nUse when: Use for broad cross-protocol yield discovery. Call at most once per request — filter with min_apy, max_apy, min_tvl_usd, and symbols_any in a single call, then sort client-side rather than re-calling. For protocol-specific rate questions use get_lending_rates.\n\nLimitations: Third-party DeFiLlama analytics; up to 50 pools per call. The `symbol` field lists underlying tokens (e.g. 'ETH-USDC') — filter client-side instead of re-calling with different arguments. Reward APY indicates reward-dependent yield; do not present spot APY as durable.\n\nAlternatives: get_lending_rates, get_protocol_tvl, get_token_price","input_schema":{"type":"object","title":"mcp_get_yield_ratesArguments","properties":{"chain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chain","default":null,"description":"Filter by chain name (e.g. 'Ethereum', 'Base', 'Arbitrum'). Case-insensitive. None = all chains."},"limit":{"type":"integer","title":"Limit","default":20,"maximum":50,"minimum":1,"description":"Maximum number of pools to return, sorted by APY descending."},"max_apy":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"title":"Max Apy","default":null,"description":"Exclude pools with APY above this value (%). Default None = no upper bound. Use to filter out leveraged/boosted pools (e.g. max_apy=30) so genuine stablecoin yields surface."},"min_apy":{"type":"number","title":"Min Apy","default":0,"minimum":0,"description":"Exclude pools with APY below this value (%). Default 0 includes all."},"protocols":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Protocols","default":null,"description":"Filter by DeFiLlama project slugs (e.g. ['aave-v3', 'compound-v3']). None or empty list = include all protocols."},"min_tvl_usd":{"type":"number","title":"Min Tvl Usd","default":1000000,"minimum":0,"description":"Exclude pools with TVL below this threshold (USD). Default $1M filters noise."},"stable_only":{"type":"boolean","title":"Stable Only","default":false,"description":"When true, return only stablecoin pools and rank by 30d mean APY first to emphasize consistency over short-term spikes."},"symbols_any":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Symbols Any","default":null,"description":"Optional symbol filter. If provided, include pools whose symbol field contains at least one token from this list (case-insensitive). Use held token symbols from get_wallet_portfolio to focus results."}}},"output_schema":{"type":"object","$defs":{"DataProvenance":{"type":"object","title":"DataProvenance","required":["provider","retrieved_at"],"properties":{"provider":{"type":"string","title":"Provider"},"cache_hit":{"type":"boolean","title":"Cache Hit","default":false},"source_urls":{"type":"array","items":{"type":"string"},"title":"Source Urls"},"retrieved_at":{"type":"string","title":"Retrieved At"},"cache_age_seconds":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"title":"Cache Age Seconds","default":null},"cache_ttl_seconds":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Cache Ttl Seconds","default":null},"source_fetched_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Fetched At","default":null}},"description":"Machine-readable source and freshness metadata for a tool response."},"YieldPoolEntry":{"type":"object","title":"YieldPoolEntry","required":["pool_id","project","symbol","chain","tvl_usd","apy","apy_mean_7d","apy_mean_30d","apy_base","apy_reward","stable","il_risk"],"properties":{"apy":{"type":"number","title":"Apy"},"chain":{"type":"string","title":"Chain"},"stable":{"type":"boolean","title":"Stable"},"symbol":{"type":"string","title":"Symbol"},"il_risk":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Il Risk"},"pool_id":{"type":"string","title":"Pool Id"},"project":{"type":"string","title":"Project"},"tvl_usd":{"type":"number","title":"Tvl Usd"},"apy_base":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Apy Base"},"apy_reward":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Apy Reward"},"apy_mean_7d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Apy Mean 7D"},"apy_mean_30d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Apy Mean 30D"}}}},"title":"GetYieldRatesOutput","required":["pools","total_matching","filters_applied","note"],"properties":{"note":{"type":"string","title":"Note"},"pools":{"type":"array","items":{"$ref":"#/$defs/YieldPoolEntry"},"title":"Pools"},"provenance":{"anyOf":[{"$ref":"#/$defs/DataProvenance"},{"type":"null"}],"default":null,"description":"Source and freshness metadata for the DeFiLlama response."},"total_matching":{"type":"integer","title":"Total Matching"},"filters_applied":{"type":"object","title":"Filters Applied","additionalProperties":true}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"http_fetch","title":"Http Fetch","description":"Fetch a web page and return its main text content, cleaned of markup. Use to read articles, documentation, and other resources referenced by URL. Blocks private and cloud-metadata addresses and re-validates every redirect hop.\n\nUse when: Use when a known URL's content is needed and structured tools cannot answer — e.g. reading a linked document or API docs. For general factual lookup prefer web_search; for token prices prefer get_token_price.\n\nLimitations: Read-only GET-style extraction returning cleaned text, not raw HTML or binary content. JS-heavy pages may yield little content; private/internal network targets are deliberately unreachable.\n\nAlternatives: web_search, get_token_price","input_schema":{"type":"object","title":"mcp_http_fetchArguments","required":["url"],"properties":{"url":{"type":"string","title":"Url","maxLength":2000,"minLength":10,"description":"URL to fetch (http or https only)"},"max_chars":{"type":"integer","title":"Max Chars","default":8000,"maximum":50000,"minimum":100,"description":"Maximum characters of extracted content to return"}}},"output_schema":{"type":"object","title":"HttpFetchOutput","required":["url","title","content","content_length","truncated"],"properties":{"url":{"type":"string","title":"Url"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"type":"string","title":"Content"},"truncated":{"type":"boolean","title":"Truncated"},"content_length":{"type":"integer","title":"Content Length"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"read_contract","title":"Read Contract","description":"Call any view/pure function on a smart contract and return the decoded result, using a supplied ABI fragment. Supports historical reads via block_identifier and caller_address context for msg.sender-dependent views. Read-only: state-changing functions are rejected.\n\nUse when: Use when a protocol question needs a contract read that no higher-level tool covers — e.g. a niche view function or a protocol outside the standard tool set. Prefer purpose-built tools (get_defi_positions, get_lending_rates) for supported protocols.\n\nLimitations: Requires a valid ABI fragment; payable/nonpayable functions are rejected. Ethereum mainnet and Base only, with bounded RPC timeout and retry.\n\nAlternatives: get_defi_positions, get_lending_rates, get_token_approvals","input_schema":{"type":"object","title":"mcp_read_contractArguments","required":["contract_address","abi_fragment","function_name"],"properties":{"args":{"type":"array","items":{"type":"string"},"title":"Args","default":[],"maxItems":50,"description":"DEPRECATED: Positional arguments for the function call. Use 'args_json' for complex objects or Gemini compatibility."},"chain_id":{"type":"integer","title":"Chain Id","default":1,"description":"Chain ID (1=Ethereum, 8453=Base)"},"args_json":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Args Json","default":null,"description":"Optional JSON array string of positional arguments for the function call. Use this instead of 'args' for complex types or when calling via Google/Gemini."},"abi_fragment":{"type":"string","title":"Abi Fragment","maxLength":65536,"description":"JSON array containing the ABI for the function to call. Supports both modern (stateMutability: view/pure) and legacy (constant: true) formats. Only read-only functions are allowed."},"function_name":{"type":"string","title":"Function Name","maxLength":200,"description":"Name of the function to call"},"caller_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caller Address","default":null,"description":"Optional EVM address to supply as msg.sender for caller-dependent view functions. This does not sign or submit a transaction."},"block_identifier":{"type":"string","title":"Block Identifier","default":"latest","maxLength":80,"description":"Block number, block hash, or 'latest'/'earliest'/'pending'"},"contract_address":{"type":"string","title":"Contract Address","description":"Contract address (0x…)"}}},"output_schema":{"type":"object","title":"ReadContractOutput","required":["contract_address","function_name","result","block_identifier","chain_id"],"properties":{"result":{"title":"Result"},"chain_id":{"type":"integer","title":"Chain Id"},"function_name":{"type":"string","title":"Function Name"},"caller_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caller Address","default":null},"block_identifier":{"type":"string","title":"Block Identifier"},"contract_address":{"type":"string","title":"Contract Address"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"record_predictions","title":"Record Predictions","description":"Record a complete structured prediction document for downstream evaluation. Call once with the exact machine-readable prediction; the human-readable report is provided separately.\n\nUse when: Use at the end of a scheduled analysis run to persist the machine-readable prediction for later scoring. Call exactly once with the complete prediction document — never partially or repeatedly.\n\nLimitations: Internal sink for scheduled analysis, not a caller-facing marketplace tool. Stores the prediction as given; no validation of prediction quality or deduplication across calls.\n\nAlternatives: get_datetime","input_schema":{"type":"object","title":"mcp_record_predictionsArguments","required":["predictions"],"properties":{"predictions":{"type":"object","title":"Predictions","description":"The complete structured prediction document for this run.","additionalProperties":true}}},"output_schema":{"type":"object","title":"RecordPredictionsOutput","required":["recorded"],"properties":{"recorded":{"type":"boolean","title":"Recorded"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"resolve_ens","title":"Resolve Ens","description":"Resolve an ENS name (e.g. 'vitalik.eth') to an Ethereum address, or an address to its primary ENS name, with avatar text record when available. Mainnet only.\n\nUse when: Use only when no 0x address is available and a name must become an address (or vice versa for attribution). If a 0x address is already present in the task or session, use it directly — resolution is redundant and adds latency.\n\nLimitations: Ethereum mainnet ENS only — no other chains or naming services. Reverse records are optional on ENS, so a valid address may legitimately have no primary name.\n\nAlternatives: get_wallet_portfolio, get_wallet_history","input_schema":{"type":"object","title":"mcp_resolve_ensArguments","required":["name"],"properties":{"name":{"type":"string","title":"Name","maxLength":253,"description":"ENS name (e.g. 'vitalik.eth') to resolve to an address, or an Ethereum address (0x…) for reverse lookup to a primary ENS name."}}},"output_schema":{"type":"object","title":"ResolveEnsOutput","required":["name","address","resolved"],"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","default":null},"avatar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar","default":null},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"resolved":{"type":"boolean","title":"Resolved"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"validate_opportunity","title":"Validate Opportunity","description":"Return a decision-ready yield-opportunity verdict before capital is deployed. The result branches to sustainable, caution, unsustainable, or insufficient_data and gives the calling agent the evidence needed to proceed, pause, or reject the opportunity.\n\nUse when: Delegate this check before deploying capital into a DeFi yield pool or staking opportunity when the caller needs an independent sustainability and liquidity decision.\n\nLimitations: Heuristic economic assessment based on DeFiLlama analytics and CoinGecko pricing. Does not audit smart contract bytecode, protocol governance, or admin key security.\n\nAlternatives: get_yield_rates, get_protocol_tvl, get_lending_rates, assess_counterparty_risk","input_schema":{"type":"object","title":"mcp_validate_opportunityArguments","required":["pool_id"],"properties":{"pool_id":{"type":"string","title":"Pool Id","description":"DeFiLlama yield pool UUID (e.g. '747c1d2a-c668-4682-b9f9-296708a3dd90')."}}},"output_schema":{"type":"object","$defs":{"RiskFactor":{"type":"object","title":"RiskFactor","required":["category","severity","detail"],"properties":{"detail":{"type":"string","title":"Detail"},"category":{"type":"string","title":"Category"},"severity":{"enum":["high","medium","low"],"type":"string","title":"Severity"}}},"YieldSummary":{"type":"object","title":"YieldSummary","properties":{"apy":{"type":"number","title":"Apy","default":0},"apy_base":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Apy Base","default":null},"apy_reward":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Apy Reward","default":null},"is_spiking":{"type":"boolean","title":"Is Spiking","default":false},"apy_mean_30d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Apy Mean 30D","default":null},"reward_share_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Reward Share Pct","default":null}}},"DataProvenance":{"type":"object","title":"DataProvenance","required":["provider","retrieved_at"],"properties":{"provider":{"type":"string","title":"Provider"},"cache_hit":{"type":"boolean","title":"Cache Hit","default":false},"source_urls":{"type":"array","items":{"type":"string"},"title":"Source Urls"},"retrieved_at":{"type":"string","title":"Retrieved At"},"cache_age_seconds":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"title":"Cache Age Seconds","default":null},"cache_ttl_seconds":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Cache Ttl Seconds","default":null},"source_fetched_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Fetched At","default":null}},"description":"Machine-readable source and freshness metadata for a tool response."},"LiquiditySummary":{"type":"object","title":"LiquiditySummary","properties":{"tvl_usd":{"type":"number","title":"Tvl Usd","default":0},"chart_days":{"type":"integer","title":"Chart Days","default":0},"drain_detected":{"type":"boolean","title":"Drain Detected","default":false},"tvl_30d_change_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tvl 30D Change Pct","default":null}}}},"title":"ValidateOpportunityOutput","required":["pool_id","verdict","sustainability_reason","provenance","as_of"],"properties":{"as_of":{"type":"string","title":"As Of"},"chain":{"type":"string","title":"Chain","default":""},"symbol":{"type":"string","title":"Symbol","default":""},"pool_id":{"type":"string","title":"Pool Id"},"project":{"type":"string","title":"Project","default":""},"verdict":{"enum":["sustainable","caution","unsustainable","insufficient_data"],"type":"string","title":"Verdict"},"provenance":{"$ref":"#/$defs/DataProvenance"},"risk_factors":{"type":"array","items":{"$ref":"#/$defs/RiskFactor"},"title":"Risk Factors"},"data_complete":{"type":"boolean","title":"Data Complete","default":true},"yield_summary":{"$ref":"#/$defs/YieldSummary"},"partial_errors":{"type":"array","items":{"type":"string"},"title":"Partial Errors"},"liquidity_summary":{"$ref":"#/$defs/LiquiditySummary"},"sustainability_reason":{"type":"string","title":"Sustainability Reason"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"},{"name":"web_search","title":"Web Search","description":"Real-time web search via Tavily for current events, fact-checking, and research. Use search_depth='advanced' for complex queries (higher quality, higher cost) and topic='news' or 'finance' for headlines or market information.\n\nUse when: Choose when the task needs current, external, or factual information not available from on-chain or local data — e.g. news, prices, documentation, or fact-checking.\n\nLimitations: Returns web snippets, not raw page bodies; results depend on Tavily coverage. Advanced depth costs more. Not a substitute for on-chain tools like get_token_price.\n\nAlternatives: get_token_price, http_fetch","input_schema":{"type":"object","title":"mcp_web_searchArguments","required":["query"],"properties":{"query":{"type":"string","title":"Query","maxLength":500,"description":"Search query"},"topic":{"enum":["general","news","finance"],"type":"string","title":"Topic","default":"general","description":"Search topic: 'general' for web, 'news' for headlines, 'finance' for markets"},"num_results":{"type":"integer","title":"Num Results","default":5,"maximum":20,"minimum":1,"description":"Number of web search results to return (1–20, default 5)."},"search_depth":{"enum":["basic","advanced"],"type":"string","title":"Search Depth","default":"basic","description":"'basic' for fast results, 'advanced' for thorough research (higher cost)"}}},"output_schema":{"type":"object","$defs":{"SearchResult":{"type":"object","title":"SearchResult","required":["title","url","snippet"],"properties":{"url":{"type":"string","title":"Url"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score","default":null},"title":{"type":"string","title":"Title"},"snippet":{"type":"string","title":"Snippet"}}}},"title":"WebSearchOutput","required":["query","num_results","results"],"properties":{"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","default":null},"query":{"type":"string","title":"Query"},"results":{"type":"array","items":{"$ref":"#/$defs/SearchResult"},"title":"Results"},"num_results":{"type":"integer","title":"Num Results"}}},"annotations":{"readOnlyHint":true},"source":"probe","observed_at":"2026-10-19T23:18:38.752Z"}],"next_cursor":null,"next_actions":[{"action":"get_connection","description":"Connection block to call these tools","href":"/v1/servers/io.github.HASAVAGE%2Fteardrop/connection?target=mcpServers","arguments":{"name":"io.github.HASAVAGE/teardrop","target":"mcpServers"}},{"action":"get_server","description":"Full descriptor with trust and connectability","href":"/v1/servers/io.github.HASAVAGE%2Fteardrop","arguments":{"name":"io.github.HASAVAGE/teardrop"}}]}