{"schema_version":"1.0","name":"Teardrop","description":"Intelligence beyond the browser. A task-manager agent with LangGraph, AG-UI streaming, and A2UI rendering.","version":"1.0.0","url":"http://0.0.0.0:8000","capabilities":{"streaming":true,"a2ui":true,"mcp_tools":true,"multi_turn":true,"human_in_the_loop":true,"billing":{"enabled":true,"scheme":"exact","network":"eip155:8453","payment_endpoint":"/agent/run","pricing_endpoint":"/billing/pricing"}},"protocols":["ag-ui","a2a","mcp"],"endpoints":{"agent_run":"/agent/run","health":"/health","docs":"/docs"},"skills":[{"name":"task_planning","description":"Break complex tasks into actionable steps."},{"name":"calculate","description":"Evaluate a safe arithmetic expression. Supports +,-,*,/,**,%,sqrt,abs,round,floor,ceil,log,sin,cos,tan,pi,e.","tags":["math","arithmetic","calculation"],"version":"1.0.0"},{"name":"convert_currency","description":"Convert between fiat currencies (USD, EUR, GBP, etc.) and crypto assets (BTC, ETH, USDC, SOL, etc.). Returns the converted amount and exchange rate.","tags":["finance","currency","crypto","conversion"],"version":"1.0.0"},{"name":"decode_transaction","description":"Decode a transaction's calldata into a human-readable function name and arguments. Optionally provide an ABI for precise decoding; otherwise uses 4byte.directory.","tags":["web3","ethereum","transaction","decode","calldata"],"version":"1.0.0"},{"name":"delegate_to_agent","description":"Delegate a task to a remote A2A-compliant agent. Discovers the agent's capabilities via its agent card, sends it a message, and returns the result. Use when a task requires specialist capabilities beyond your own tools.","tags":["a2a","delegation","agent"],"version":"1.0.0"},{"name":"get_datetime","description":"Return the current UTC date and time. Optional strftime format parameter.","tags":["datetime","utility"],"version":"1.0.0"},{"name":"get_block","description":"Get details for an Ethereum or Base block by number, hash, or 'latest'.","tags":["web3","ethereum","block"],"version":"1.0.0"},{"name":"get_gas_price","description":"Get current gas price (base fee + priority fee) on Ethereum or Base.","tags":["web3","ethereum","gas","fees"],"version":"1.0.0"},{"name":"get_token_price","description":"Get current price, 24h change, market cap, and volume for one or more crypto tokens. Accepts symbols (BTC, ETH, SOL) or CoinGecko IDs. Supports batch queries up to 50 tokens.","tags":["finance","crypto","price","market"],"version":"1.0.0"},{"name":"web_search","description":"Search the web for information. Returns titles, URLs, snippets, and relevance scores.","tags":["search","web","realtime"],"version":"1.0.0"},{"name":"count_text_stats","description":"Return word count, character count, sentence count, and paragraph statistics for a given text.","tags":["text","analysis","statistics"],"version":"1.0.0"},{"name":"http_fetch","description":"Fetch a web page and extract its main text content. Useful for reading articles, documentation, and web resources. Returns cleaned text, not raw HTML.","tags":["web","http","fetch","content"],"version":"1.0.0"},{"name":"get_eth_balance","description":"Get the native ETH balance of an Ethereum or Base address.","tags":["web3","ethereum","balance"],"version":"1.0.0"},{"name":"get_erc20_balance","description":"Get the ERC-20 token balance of a wallet, including symbol and decimals.","tags":["web3","ethereum","erc20","token","balance"],"version":"1.0.0"},{"name":"get_transaction","description":"Get details and receipt for an Ethereum or Base transaction by hash.","tags":["web3","ethereum","transaction"],"version":"1.0.0"},{"name":"get_wallet_portfolio","description":"Get aggregated token holdings with USD values for a wallet address. Returns native ETH plus major ERC-20 balances (USDC, USDT, DAI, WETH, WBTC) sorted by value. Supports Ethereum mainnet and Base.","tags":["web3","ethereum","portfolio","balance","defi"],"version":"1.0.0"},{"name":"read_contract","description":"Call any view/pure function on a smart contract. Provide the ABI fragment and function name. State-changing functions (payable/nonpayable) are rejected.","tags":["web3","ethereum","contract","abi"],"version":"1.0.0"},{"name":"resolve_ens","description":"Resolve an ENS name (e.g. vitalik.eth) to an Ethereum address. Mainnet only.","tags":["web3","ethereum","ens","identity"],"version":"1.0.0"},{"name":"a2ui_rendering","description":"Declarative UI component generation (table, form, text, button, etc.)."}],"tools":[{"name":"calculate","version":"1.0.0","description":"Evaluate a safe arithmetic expression. Supports +,-,*,/,**,%,sqrt,abs,round,floor,ceil,log,sin,cos,tan,pi,e.","tags":["math","arithmetic","calculation"],"input_schema":{"properties":{"expression":{"description":"A safe arithmetic expression, e.g. '(3 + 4) * 2 / sqrt(9)'","maxLength":200,"title":"Expression","type":"string"}},"required":["expression"],"title":"CalculateInput","type":"object"},"output_schema":{"properties":{"expression":{"title":"Expression","type":"string"},"result":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Result"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Error"}},"required":["expression"],"title":"CalculateOutput","type":"object"}},{"name":"convert_currency","version":"1.0.0","description":"Convert between fiat currencies (USD, EUR, GBP, etc.) and crypto assets (BTC, ETH, USDC, SOL, etc.). Returns the converted amount and exchange rate.","tags":["finance","currency","crypto","conversion"],"input_schema":{"properties":{"amount":{"description":"Amount to convert","exclusiveMinimum":0,"title":"Amount","type":"number"},"from_currency":{"description":"Source currency (e.g. 'ETH', 'USD', 'BTC')","maxLength":20,"minLength":1,"title":"From Currency","type":"string"},"to_currency":{"description":"Target currency (e.g. 'USD', 'EUR', 'BTC')","maxLength":20,"minLength":1,"title":"To Currency","type":"string"}},"required":["amount","from_currency","to_currency"],"title":"ConvertCurrencyInput","type":"object"},"output_schema":{"properties":{"amount":{"title":"Amount","type":"number"},"from_currency":{"title":"From Currency","type":"string"},"to_currency":{"title":"To Currency","type":"string"},"converted_amount":{"title":"Converted Amount","type":"number"},"rate":{"title":"Rate","type":"number"},"source":{"title":"Source","type":"string"}},"required":["amount","from_currency","to_currency","converted_amount","rate","source"],"title":"ConvertCurrencyOutput","type":"object"}},{"name":"decode_transaction","version":"1.0.0","description":"Decode a transaction's calldata into a human-readable function name and arguments. Optionally provide an ABI for precise decoding; otherwise uses 4byte.directory.","tags":["web3","ethereum","transaction","decode","calldata"],"input_schema":{"properties":{"tx_hash":{"description":"Transaction hash (0x…)","title":"Tx Hash","type":"string"},"chain_id":{"default":1,"description":"Chain ID (1=Ethereum, 8453=Base)","title":"Chain Id","type":"integer"},"abi_json":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional ABI JSON array for decoding. If omitted, 4byte.directory is used.","title":"Abi Json"}},"required":["tx_hash"],"title":"DecodeTransactionInput","type":"object"},"output_schema":{"properties":{"tx_hash":{"title":"Tx Hash","type":"string"},"from_address":{"title":"From Address","type":"string"},"to_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Address"},"value_eth":{"title":"Value Eth","type":"string"},"function_selector":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Function Selector"},"function_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Function Name"},"decoded_args":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Decoded Args"},"raw_calldata":{"title":"Raw Calldata","type":"string"},"decode_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decode Source"},"chain_id":{"title":"Chain Id","type":"integer"}},"required":["tx_hash","from_address","to_address","value_eth","function_selector","function_name","decoded_args","raw_calldata","decode_source","chain_id"],"title":"DecodeTransactionOutput","type":"object"}},{"name":"delegate_to_agent","version":"1.0.0","description":"Delegate a task to a remote A2A-compliant agent. Discovers the agent's capabilities via its agent card, sends it a message, and returns the result. Use when a task requires specialist capabilities beyond your own tools.","tags":["a2a","delegation","agent"],"input_schema":{"properties":{"agent_url":{"description":"Base URL of the remote A2A agent (e.g. https://agent.example.com)","maxLength":2000,"minLength":10,"title":"Agent Url","type":"string"},"task_description":{"description":"Natural language description of the task to delegate","maxLength":4096,"minLength":1,"title":"Task Description","type":"string"}},"required":["agent_url","task_description"],"title":"DelegateToAgentInput","type":"object"},"output_schema":{"properties":{"agent_name":{"description":"Name of the remote agent (from its agent card)","title":"Agent Name","type":"string"},"status":{"description":"A2A task state: completed, failed, etc.","title":"Status","type":"string"},"result":{"description":"Text result extracted from the remote agent's response","title":"Result","type":"string"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Error message, if any","title":"Error"}},"required":["agent_name","status","result"],"title":"DelegateToAgentOutput","type":"object"}},{"name":"get_datetime","version":"1.0.0","description":"Return the current UTC date and time. Optional strftime format parameter.","tags":["datetime","utility"],"input_schema":{"properties":{"format":{"default":"%Y-%m-%d %H:%M:%S UTC","description":"strftime format string for the output","maxLength":100,"title":"Format","type":"string"}},"title":"GetDatetimeInput","type":"object"},"output_schema":{"properties":{"datetime":{"title":"Datetime","type":"string"},"iso8601":{"title":"Iso8601","type":"string"}},"required":["datetime","iso8601"],"title":"GetDatetimeOutput","type":"object"}},{"name":"get_block","version":"1.0.0","description":"Get details for an Ethereum or Base block by number, hash, or 'latest'.","tags":["web3","ethereum","block"],"input_schema":{"properties":{"block_identifier":{"default":"latest","description":"Block number, block hash, or 'latest'/'earliest'/'pending'","title":"Block Identifier","type":"string"},"chain_id":{"default":1,"description":"Chain ID (1=Ethereum, 8453=Base)","title":"Chain Id","type":"integer"}},"title":"GetBlockInput","type":"object"},"output_schema":{"properties":{"number":{"title":"Number","type":"integer"},"hash":{"title":"Hash","type":"string"},"timestamp":{"title":"Timestamp","type":"integer"},"transaction_count":{"title":"Transaction Count","type":"integer"},"gas_used":{"title":"Gas Used","type":"integer"},"base_fee_gwei":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Fee Gwei"}},"required":["number","hash","timestamp","transaction_count","gas_used","base_fee_gwei"],"title":"GetBlockOutput","type":"object"}},{"name":"get_gas_price","version":"1.0.0","description":"Get current gas price (base fee + priority fee) on Ethereum or Base.","tags":["web3","ethereum","gas","fees"],"input_schema":{"properties":{"chain_id":{"default":1,"description":"Chain ID (1=Ethereum, 8453=Base)","title":"Chain Id","type":"integer"}},"title":"GetGasPriceInput","type":"object"},"output_schema":{"properties":{"chain_id":{"title":"Chain Id","type":"integer"},"gas_price_gwei":{"title":"Gas Price Gwei","type":"string"},"base_fee_gwei":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Fee Gwei"},"priority_fee_gwei":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority Fee Gwei"}},"required":["chain_id","gas_price_gwei","base_fee_gwei","priority_fee_gwei"],"title":"GetGasPriceOutput","type":"object"}},{"name":"get_token_price","version":"1.0.0","description":"Get current price, 24h change, market cap, and volume for one or more crypto tokens. Accepts symbols (BTC, ETH, SOL) or CoinGecko IDs. Supports batch queries up to 50 tokens.","tags":["finance","crypto","price","market"],"input_schema":{"properties":{"tokens":{"description":"Token symbols or CoinGecko IDs (e.g. ['BTC', 'ETH', 'SOL'])","items":{"type":"string"},"maxItems":50,"minItems":1,"title":"Tokens","type":"array"},"vs_currency":{"default":"usd","description":"Quote currency (usd, eur, gbp, btc, eth)","title":"Vs Currency","type":"string"}},"required":["tokens"],"title":"GetTokenPriceInput","type":"object"},"output_schema":{"$defs":{"TokenPriceEntry":{"properties":{"id":{"title":"Id","type":"string"},"symbol":{"title":"Symbol","type":"string"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"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"}},"required":["id","symbol","price","market_cap","volume_24h","change_24h_pct"],"title":"TokenPriceEntry","type":"object"}},"properties":{"vs_currency":{"title":"Vs Currency","type":"string"},"prices":{"items":{"$ref":"#/$defs/TokenPriceEntry"},"title":"Prices","type":"array"}},"required":["vs_currency","prices"],"title":"GetTokenPriceOutput","type":"object"}},{"name":"web_search","version":"1.0.0","description":"Search the web for information. Returns titles, URLs, snippets, and relevance scores.","tags":["search","web","realtime"],"input_schema":{"properties":{"query":{"description":"Search query","maxLength":500,"title":"Query","type":"string"},"num_results":{"default":5,"maximum":20,"minimum":1,"title":"Num Results","type":"integer"}},"required":["query"],"title":"WebSearchInput","type":"object"},"output_schema":{"$defs":{"SearchResult":{"properties":{"title":{"title":"Title","type":"string"},"url":{"title":"Url","type":"string"},"snippet":{"title":"Snippet","type":"string"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Score"}},"required":["title","url","snippet"],"title":"SearchResult","type":"object"}},"properties":{"query":{"title":"Query","type":"string"},"num_results":{"title":"Num Results","type":"integer"},"results":{"items":{"$ref":"#/$defs/SearchResult"},"title":"Results","type":"array"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Note"}},"required":["query","num_results","results"],"title":"WebSearchOutput","type":"object"}},{"name":"count_text_stats","version":"1.0.0","description":"Return word count, character count, sentence count, and paragraph statistics for a given text.","tags":["text","analysis","statistics"],"input_schema":{"properties":{"text":{"description":"Text to summarize","maxLength":10000,"title":"Text","type":"string"}},"required":["text"],"title":"SummarizeTextInput","type":"object"},"output_schema":{"properties":{"character_count":{"title":"Character Count","type":"integer"},"word_count":{"title":"Word Count","type":"integer"},"sentence_count":{"title":"Sentence Count","type":"integer"},"paragraph_count":{"title":"Paragraph Count","type":"integer"},"average_words_per_sentence":{"title":"Average Words Per Sentence","type":"number"}},"required":["character_count","word_count","sentence_count","paragraph_count","average_words_per_sentence"],"title":"SummarizeTextOutput","type":"object"}},{"name":"http_fetch","version":"1.0.0","description":"Fetch a web page and extract its main text content. Useful for reading articles, documentation, and web resources. Returns cleaned text, not raw HTML.","tags":["web","http","fetch","content"],"input_schema":{"properties":{"url":{"description":"URL to fetch (http or https only)","maxLength":2000,"minLength":10,"title":"Url","type":"string"},"max_chars":{"default":8000,"description":"Maximum characters of extracted content to return","maximum":50000,"minimum":100,"title":"Max Chars","type":"integer"}},"required":["url"],"title":"HttpFetchInput","type":"object"},"output_schema":{"properties":{"url":{"title":"Url","type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"title":"Content","type":"string"},"content_length":{"title":"Content Length","type":"integer"},"truncated":{"title":"Truncated","type":"boolean"}},"required":["url","title","content","content_length","truncated"],"title":"HttpFetchOutput","type":"object"}},{"name":"get_eth_balance","version":"1.0.0","description":"Get the native ETH balance of an Ethereum or Base address.","tags":["web3","ethereum","balance"],"input_schema":{"properties":{"address":{"description":"Ethereum address (0x…)","title":"Address","type":"string"},"chain_id":{"default":1,"description":"Chain ID (1=Ethereum, 8453=Base)","title":"Chain Id","type":"integer"}},"required":["address"],"title":"GetEthBalanceInput","type":"object"},"output_schema":{"properties":{"address":{"title":"Address","type":"string"},"balance_wei":{"title":"Balance Wei","type":"string"},"balance_eth":{"title":"Balance Eth","type":"string"},"chain_id":{"title":"Chain Id","type":"integer"}},"required":["address","balance_wei","balance_eth","chain_id"],"title":"GetEthBalanceOutput","type":"object"}},{"name":"get_erc20_balance","version":"1.0.0","description":"Get the ERC-20 token balance of a wallet, including symbol and decimals.","tags":["web3","ethereum","erc20","token","balance"],"input_schema":{"properties":{"wallet_address":{"description":"Wallet address (0x…)","title":"Wallet Address","type":"string"},"token_address":{"description":"ERC-20 token contract address (0x…)","title":"Token Address","type":"string"},"chain_id":{"default":1,"description":"Chain ID (1=Ethereum, 8453=Base)","title":"Chain Id","type":"integer"}},"required":["wallet_address","token_address"],"title":"GetErc20BalanceInput","type":"object"},"output_schema":{"properties":{"wallet_address":{"title":"Wallet Address","type":"string"},"token_address":{"title":"Token Address","type":"string"},"token_symbol":{"title":"Token Symbol","type":"string"},"token_decimals":{"title":"Token Decimals","type":"integer"},"balance_raw":{"title":"Balance Raw","type":"string"},"balance_formatted":{"title":"Balance Formatted","type":"string"},"chain_id":{"title":"Chain Id","type":"integer"}},"required":["wallet_address","token_address","token_symbol","token_decimals","balance_raw","balance_formatted","chain_id"],"title":"GetErc20BalanceOutput","type":"object"}},{"name":"get_transaction","version":"1.0.0","description":"Get details and receipt for an Ethereum or Base transaction by hash.","tags":["web3","ethereum","transaction"],"input_schema":{"properties":{"tx_hash":{"description":"Transaction hash (0x…)","title":"Tx Hash","type":"string"},"chain_id":{"default":1,"description":"Chain ID (1=Ethereum, 8453=Base)","title":"Chain Id","type":"integer"}},"required":["tx_hash"],"title":"GetTransactionInput","type":"object"},"output_schema":{"properties":{"tx_hash":{"title":"Tx Hash","type":"string"},"from_address":{"title":"From Address","type":"string"},"to_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Address"},"value_eth":{"title":"Value Eth","type":"string"},"gas_used":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gas Used"},"gas_price_gwei":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gas Price Gwei"},"status":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"1=success, 0=revert, None=pending","title":"Status"},"block_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Block Number"},"chain_id":{"title":"Chain Id","type":"integer"}},"required":["tx_hash","from_address","to_address","value_eth","gas_used","gas_price_gwei","block_number","chain_id"],"title":"GetTransactionOutput","type":"object"}},{"name":"get_wallet_portfolio","version":"1.0.0","description":"Get aggregated token holdings with USD values for a wallet address. Returns native ETH plus major ERC-20 balances (USDC, USDT, DAI, WETH, WBTC) sorted by value. Supports Ethereum mainnet and Base.","tags":["web3","ethereum","portfolio","balance","defi"],"input_schema":{"properties":{"wallet_address":{"description":"Wallet address (0x…)","title":"Wallet Address","type":"string"},"chain_id":{"default":1,"description":"Chain ID (1=Ethereum, 8453=Base)","title":"Chain Id","type":"integer"}},"required":["wallet_address"],"title":"GetWalletPortfolioInput","type":"object"},"output_schema":{"$defs":{"PortfolioEntry":{"properties":{"symbol":{"title":"Symbol","type":"string"},"token_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Address"},"balance_formatted":{"title":"Balance Formatted","type":"string"},"price_usd":{"title":"Price Usd","type":"number"},"value_usd":{"title":"Value Usd","type":"number"}},"required":["symbol","token_address","balance_formatted","price_usd","value_usd"],"title":"PortfolioEntry","type":"object"}},"properties":{"wallet_address":{"title":"Wallet Address","type":"string"},"chain_id":{"title":"Chain Id","type":"integer"},"total_value_usd":{"title":"Total Value Usd","type":"number"},"holdings":{"items":{"$ref":"#/$defs/PortfolioEntry"},"title":"Holdings","type":"array"}},"required":["wallet_address","chain_id","total_value_usd","holdings"],"title":"GetWalletPortfolioOutput","type":"object"}},{"name":"read_contract","version":"1.0.0","description":"Call any view/pure function on a smart contract. Provide the ABI fragment and function name. State-changing functions (payable/nonpayable) are rejected.","tags":["web3","ethereum","contract","abi"],"input_schema":{"properties":{"contract_address":{"description":"Contract address (0x…)","title":"Contract Address","type":"string"},"abi_fragment":{"description":"JSON array containing the ABI for the function to call. Only view/pure functions are allowed.","title":"Abi Fragment","type":"string"},"function_name":{"description":"Name of the function to call","title":"Function Name","type":"string"},"args":{"description":"Positional arguments for the function call","items":{},"title":"Args","type":"array"},"chain_id":{"default":1,"description":"Chain ID (1=Ethereum, 8453=Base)","title":"Chain Id","type":"integer"}},"required":["contract_address","abi_fragment","function_name"],"title":"ReadContractInput","type":"object"},"output_schema":{"properties":{"contract_address":{"title":"Contract Address","type":"string"},"function_name":{"title":"Function Name","type":"string"},"result":{"title":"Result"},"chain_id":{"title":"Chain Id","type":"integer"}},"required":["contract_address","function_name","result","chain_id"],"title":"ReadContractOutput","type":"object"}},{"name":"resolve_ens","version":"1.0.0","description":"Resolve an ENS name (e.g. vitalik.eth) to an Ethereum address. Mainnet only.","tags":["web3","ethereum","ens","identity"],"input_schema":{"properties":{"name":{"description":"ENS name (e.g. 'vitalik.eth')","title":"Name","type":"string"}},"required":["name"],"title":"ResolveEnsInput","type":"object"},"output_schema":{"properties":{"name":{"title":"Name","type":"string"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"resolved":{"title":"Resolved","type":"boolean"}},"required":["name","address","resolved"],"title":"ResolveEnsOutput","type":"object"}}],"authentication":{"required":true,"scheme":"bearer","type":"jwt","token_endpoint":"/token"}}