{"serverId":"mcp-registry/io.github.syenite-ai/syenite","tools":[{"name":"alerts.check","fixed":{"name":"alerts_check","description":"Triggers an immediate evaluation of all registered watches and returns any unacknowledged alerts grouped by severity (critical or warning). Call this to poll for fired conditions without waiting for a webhook — it is safe to call repeatedly and will re-evaluate all watches on each call. Optionally pass watchId to filter results to a single watch; pass acknowledge: true with a watchId to clear that watch's alerts after reading. Returns alert count, severity breakdown, and per-alert details includ","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"watchId":{"type":"string","description":"Filter alerts for a specific watch ID"},"acknowledge":{"type":"boolean","default":false,"description":"Mark returned alerts as acknowledged"}}},"annotations":{"title":"Check Alerts","readOnlyHint":true,"openWorldHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"alerts.check\" → \"alerts_check\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":229,"tokensAfter":229},{"name":"alerts.list","fixed":{"name":"alerts_list","description":"Returns all currently registered watches with their full configuration, type (lending, rate, carry, yield, prediction), threshold parameters, and last check timestamp. Use this to audit active monitors before creating new ones or to retrieve watch IDs needed for alerts.remove. Takes no parameters and never triggers a live check — for current alert state, call alerts.check instead.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"List Watches","readOnlyHint":true,"openWorldHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"alerts.list\" → \"alerts_list\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":131,"tokensAfter":131},{"name":"alerts.remove","fixed":{"name":"alerts_remove","description":"Removes a registered watch by its ID, stopping all monitoring and alert generation for that watch immediately and permanently. Requires the watchId returned when the watch was created (or retrieved via alerts.list). Returns success: true if the watch was found and removed, or false if the ID was not found. Does not affect other watches or their accumulated alerts.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["watchId"],"properties":{"watchId":{"type":"string","description":"ID of the watch to remove"}}},"annotations":{"title":"Remove Watch","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"alerts.remove\" → \"alerts_remove\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":167,"tokensAfter":167},{"name":"alerts.watch","fixed":{"name":"alerts_watch","description":"Registers a persistent background monitor that fires alerts when user-defined thresholds are crossed, persisting across server restarts. Supports four watch types: lending (monitors a wallet's health factor on Aave, Morpho, Spark, or Compound — fires when health factor drops below healthFactorThreshold), rate (monitors borrow/supply APY and pool utilization for a collateral/borrowAsset pair — fires on APY crossings via rateBorrowThreshold/rateSupplyThreshold or utilization via rateUtilizationThr","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"type":{"enum":["lending","rate","carry","yield"],"type":"string","default":"lending","description":"Watch type: lending (health factor), rate (APY/utilization), carry (net spread), yield (best APY)"},"chain":{"enum":["ethereum","arbitrum","base","all"],"type":"string","description":"Chain filter (lending)"},"address":{"type":"string","description":"EVM address to monitor (lending watches)"},"protocol":{"enum":["aave-v3","compound-v3","morpho","spark","all"],"type":"string","description":"Protocol filter (lending)"},"rateChain":{"type":"string","description":"Chain filter (rate)"},"yieldRisk":{"enum":["low","medium","high"],"type":"string","description":"Max risk level (yield)"},"webhookUrl":{"type":"string","description":"HTTP(S) URL to POST alerts to in real-time"},"yieldAsset":{"type":"string","description":"Asset to watch, e.g. ETH, USDC, stables (yield)"},"yieldChains":{"type":"array","items":{"type":"string"},"description":"Chains to include (yield)"},"rateProtocol":{"enum":["aave-v3","morpho","spark","compound-v3","fluid","all"],"type":"string","description":"Protocol filter (rate)"},"rateDirection":{"enum":["above","below"],"type":"string","description":"APY threshold direction (rate, default above)"},"carryThreshold":{"type":"number","description":"Minimum net spread % to fire carry_opportunity (carry)"},"rateCollateral":{"type":"string","description":"Collateral asset, e.g. wBTC (rate)"},"yieldDirection":{"enum":["above","below"],"type":"string","description":"APY threshold direction (yield, default above)"},"carryCollateral":{"type":"string","description":"Collateral you post to borrow, e.g. wBTC (carry)"},"rateBorrowAsset":{"type":"string","description":"Borrow asset, e.g. USDC (rate, default USDC)"},"carryBorrowAsset":{"type":"string","description":"Asset you borrow, e.g. USDC (carry)"},"carrySupplyAsset":{"type":"string","description":"Asset you supply — defaults to carryBorrowAsset (carry)"},"yieldApyThreshold":{"type":"number","description":"APY % threshold (yield)"},"rateBorrowThreshold":{"type":"number","description":"Borrow APY % threshold (rate)"},"rateSupplyThreshold":{"type":"number","description":"Supply APY % threshold (rate)"},"healthFactorThreshold":{"type":"number","maximum":5,"minimum":1,"description":"Alert threshold (lending, default 1.5)"},"rateUtilizationThreshold":{"type":"number","maximum":100,"minimum":0,"description":"Utilization % threshold — fires rate_utilization; critical at ≥95% (rate)"}}},"annotations":{"title":"Watch Rates or Position","readOnlyHint":false,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"alerts.watch\" → \"alerts_watch\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":865,"tokensAfter":865},{"name":"find.strategy","fixed":{"name":"find_strategy","description":"Orchestrates a parallel scan across yield opportunities, carry trades, lending leverage, cross-chain rate arbitrage, and prediction market signals to surface the best strategies for a given asset and risk profile.\nCall this as the first step when an agent has capital to deploy and needs ranked recommendations — it fans out to `yield.opportunities`, `carry.screen`, `gas.estimate`, and optionally `prediction.signals` in one call.\nProvide `asset` (e.g. \"WETH\", \"USDC\", \"WBTC\"), optionally `amount` i","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["asset"],"properties":{"asset":{"type":"string","description":"Asset you have or want to deploy: \"ETH\", \"WETH\", \"wBTC\", \"USDC\", \"USDT\", etc."},"chain":{"enum":["ethereum","arbitrum","base","all"],"type":"string","default":"all","description":"Chain preference"},"amount":{"type":"number","default":10000,"description":"Amount in USD to deploy (for return calculations)"},"riskTolerance":{"enum":["low","medium","high"],"type":"string","default":"high","description":"Maximum risk level: low (yield only), medium (carry + arb), high (leverage + prediction)"},"includePrediction":{"type":"boolean","default":true,"description":"Include prediction market signals in strategy search"}}},"annotations":{"title":"Find Strategy","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"find.strategy\" → \"find_strategy\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":372,"tokensAfter":372},{"name":"gas.estimate","fixed":{"name":"gas_estimate","description":"Returns current gas prices and estimated costs for common DeFi operations across EVM chains (Ethereum, Arbitrum, Base, BNB Chain) and Solana priority fees, allowing agents to confirm a wallet holds sufficient native gas and to select the cheapest chain for an operation. Covered operations: transfer, erc20_transfer, erc20_approve, swap, bridge, lending_supply, lending_borrow, contract_register — each reported with gas units, cost in native token, and approximate USD cost at current price. For Sol","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"chains":{"type":"array","items":{"enum":["ethereum","arbitrum","base","bsc"],"type":"string"},"description":"Chains to check (defaults to all)"},"operations":{"type":"array","items":{"type":"string"},"description":"Operation types to estimate: transfer, erc20_transfer, swap, bridge, erc20_approve, lending_supply, lending_borrow, contract_register"}}},"annotations":{"title":"Gas Estimate","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"gas.estimate\" → \"gas_estimate\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":276,"tokensAfter":276},{"name":"kalshi.book","fixed":{"name":"kalshi_book","description":"Fetches the current order book for a specific Kalshi market by ticker, returning YES and NO bid levels with sizes in contracts, mid-price, spread in cents and basis points, and total depth on each side. Use this to assess execution quality before sizing a position — wide spreads indicate higher edge for makers. Requires ticker (e.g. \"KXBTC-25DEC31-T100000\"), obtained from kalshi.trending or kalshi.search. Kalshi prices are in cents (0–99); a YES bid at 45 means you pay 45¢ per contract to win $1","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["ticker"],"properties":{"ticker":{"type":"string","description":"Market ticker (e.g. \"KXBTC-25DEC31-T100000\")"}}},"annotations":{"title":"Kalshi Order Book","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"kalshi.book\" → \"kalshi_book\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":209,"tokensAfter":209},{"name":"kalshi.market","fixed":{"name":"kalshi_market","description":"Provides a comprehensive deep-dive on a single Kalshi market by ticker, returning the question, current YES/NO prices in cents, implied probability, 24h and 7d price history stats (open, close, min, max, change), volume in contracts with approximate USD value, liquidity, order book depth, bid-ask spread, one-sided flow direction, resolution rules, and time remaining until close. Use this after kalshi.trending or kalshi.search to fully evaluate a market before taking a position. Requires ticker (","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["ticker"],"properties":{"ticker":{"type":"string","description":"Market ticker (e.g. \"KXBTC-25DEC31-T100000\")"}}},"annotations":{"title":"Kalshi Market Detail","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"kalshi.market\" → \"kalshi_market\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":209,"tokensAfter":209},{"name":"kalshi.search","fixed":{"name":"kalshi_search","description":"Searches open Kalshi events and markets by keyword, filtering against event titles, tickers, series names, and market subtitles. Use this when looking for a specific topic (elections, crypto price levels, economic data, sports). Requires query (search term); optionally pass limit (1–50, default 25). Returns tickers and market details needed for kalshi.market and kalshi.book. Note: Kalshi has no server-side text search — this filters a large fetch of open events client-side, so very rare topics m","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Max results (default 25, max 50)"},"query":{"type":"string","description":"Search term (topic, ticker, or keyword)"}}},"annotations":{"title":"Search Kalshi Markets","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"kalshi.search\" → \"kalshi_search\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":235,"tokensAfter":235},{"name":"kalshi.signals","fixed":{"name":"kalshi_signals","description":"Scans open Kalshi events and returns ranked actionable signals across five categories: wide_spread (bid-ask gap above 4¢ with meaningful liquidity — market-making opportunity), extreme_probability (YES ask above 92¢ or below 8¢ with volume — contrarian or long-shot play), high_volume (volume_24h above 10,000 contracts — active price discovery), near_resolution (market closing within 48 hours — time-sensitive opportunity), and mispriced (mutually exclusive event markets don't sum to ~100¢ — arbit","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Max signals to return (default 20, max 50)"},"types":{"type":"array","items":{"type":"string"},"description":"Filter by signal type: wide_spread, extreme_probability, high_volume, near_resolution, mispriced"},"minStrength":{"type":"number","maximum":100,"minimum":0,"description":"Minimum signal strength to include (0–100, default 0)"}}},"annotations":{"title":"Kalshi Signals","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"kalshi.signals\" → \"kalshi_signals\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":290,"tokensAfter":290},{"name":"kalshi.trending","fixed":{"name":"kalshi_trending","description":"Fetches the top open events on Kalshi ranked by recency, returning event titles, tickers, market questions, current YES/NO prices in cents, implied probability, volume in contracts, and liquidity. Kalshi is a US-regulated prediction market exchange — markets settle to $1 (YES) or $0 (NO). Use this as the starting point for Kalshi market discovery before calling kalshi.market, kalshi.book, or kalshi.signals. Optionally pass limit (1–50, default 25). Prices are in cents where 45¢ means ~45% implie","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Number of events to return (default 25, max 50)"}}},"annotations":{"title":"Kalshi Trending Markets","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"kalshi.trending\" → \"kalshi_trending\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":211,"tokensAfter":211},{"name":"lending.borrow","fixed":{"name":"lending_borrow","description":"Generates unsigned variable-rate borrow transaction calldata for Aave v3 (Ethereum, Arbitrum, Base) or Spark (Ethereum).\nCall `lending.risk.assess` before this tool to confirm the target LTV is safe and the market has sufficient liquidity.\nProvide `protocol`, `chain`, `asset` to borrow (e.g. \"USDC\"), human-readable `amount`, and `onBehalfOf` wallet address; collateral must already be supplied.\nReturns one transaction request (no approval needed for borrows); Syenite never holds private keys and ","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["asset","amount","onBehalfOf"],"properties":{"asset":{"type":"string","description":"Asset to borrow: \"USDC\", \"USDT\", \"DAI\", \"GHO\""},"chain":{"enum":["ethereum","arbitrum","base"],"type":"string","default":"ethereum","description":"Chain"},"amount":{"type":"string","description":"Borrow amount in human-readable units"},"protocol":{"enum":["aave-v3","spark"],"type":"string","default":"aave-v3","description":"Lending protocol"},"onBehalfOf":{"type":"string","description":"Address with collateral deposited"}}},"annotations":{"title":"Borrow Asset","readOnlyHint":false,"openWorldHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"lending.borrow\" → \"lending_borrow\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":324,"tokensAfter":324},{"name":"lending.market.overview","fixed":{"name":"lending_market_overview","description":"Returns an aggregated overview of DeFi lending market conditions across Aave v3, Compound V3, Fluid, Morpho Blue, and Spark on Ethereum, Arbitrum, and Base.\nUse this for a macro view of the lending landscape before calling `lending.rates.query` for per-market detail — it surfaces cross-protocol totals for supply, borrow, utilization, and available liquidity alongside borrow and supply APY ranges per protocol.\nPass `collateral` (e.g. \"ETH\", \"BTC\", or \"all\") to scope the market scan; optionally pa","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"chain":{"enum":["ethereum","arbitrum","base","all"],"type":"string","default":"all","description":"Chain to query. Defaults to all supported chains."},"collateral":{"type":"string","default":"all","description":"Filter by collateral asset, or \"all\""}}},"annotations":{"title":"Market Overview","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"lending.market.overview\" → \"lending_market_overview\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":254,"tokensAfter":254},{"name":"lending.position.monitor","fixed":{"name":"lending_position_monitor","description":"Reads the live health of any EVM wallet's lending positions across Aave v3, Morpho Blue, Compound V3, and Spark on Ethereum, Arbitrum, and Base — no authentication required.\nCall this before withdrawing collateral or after price moves to verify health factor and liquidation distance; positions with health factor below 1.5 trigger an explicit warning in the response.\nProvide the 0x-prefixed EVM `address` to inspect; optionally filter by `protocol` (\"aave-v3\", \"morpho-blue\", \"compound-v3\", or \"spa","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["address"],"properties":{"chain":{"enum":["ethereum","arbitrum","base","all"],"type":"string","default":"all","description":"Chain to query. Defaults to all supported chains."},"address":{"type":"string","description":"EVM address to check (works on all supported chains)"},"protocol":{"enum":["aave-v3","compound-v3","morpho","spark","all"],"type":"string","default":"all","description":"Protocol filter"}}},"annotations":{"title":"Position Monitor","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"lending.position.monitor\" → \"lending_position_monitor\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":296,"tokensAfter":296},{"name":"lending.rates.query","fixed":{"name":"lending_rates_query","description":"Returns real-time borrow APY, supply APY, available liquidity, utilization, max LTV, liquidation threshold, and liquidation penalty for every active lending market across Aave v3, Compound V3, Fluid, Morpho Blue, and Spark on Ethereum, Arbitrum, and Base, plus Kamino and MarginFi on Solana.\nCall this before any borrow or supply decision to identify the cheapest borrow or the highest supply rate for a given asset pair; the response includes a `bestBorrowRate` summary field for quick comparison.\nP","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"chain":{"enum":["ethereum","arbitrum","base","all"],"type":"string","default":"all","description":"Chain to query. Defaults to all supported chains."},"collateral":{"type":"string","default":"all","description":"Collateral asset or category: \"wBTC\", \"tBTC\", \"cbBTC\", \"WETH\", \"wstETH\", \"rETH\", \"cbETH\", \"weETH\", \"BTC\", \"ETH\", or \"all\""},"borrowAsset":{"type":"string","default":"USDC","description":"Asset to borrow: \"USDC\", \"USDT\", \"DAI\", \"GHO\""}}},"annotations":{"title":"Lending Rates","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"lending.rates.query\" → \"lending_rates_query\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":313,"tokensAfter":313},{"name":"lending.repay","fixed":{"name":"lending_repay","description":"Generates unsigned ERC-20 approval and variable-rate repay transaction calldata for Aave v3 (Ethereum, Arbitrum, Base) or Spark (Ethereum).\nUse this to reduce or eliminate an outstanding borrow; pass amount \"max\" (uint256 max) to repay the entire debt balance, or a specific human-readable amount for partial repayment.\nProvide `protocol`, `chain`, `asset` being repaid, `amount`, and `onBehalfOf` wallet address.\nReturns the ERC-20 approval transaction (submit first) and the repay transaction; Syen","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["asset","amount","onBehalfOf"],"properties":{"asset":{"type":"string","description":"Asset to repay"},"chain":{"enum":["ethereum","arbitrum","base"],"type":"string","default":"ethereum","description":"Chain"},"amount":{"type":"string","description":"Repay amount in human-readable units, or \"max\" for full repayment"},"protocol":{"enum":["aave-v3","spark"],"type":"string","default":"aave-v3","description":"Lending protocol"},"onBehalfOf":{"type":"string","description":"Address whose debt to repay"}}},"annotations":{"title":"Repay Loan","readOnlyHint":false,"openWorldHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"lending.repay\" → \"lending_repay\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":319,"tokensAfter":319},{"name":"lending.risk.assess","fixed":{"name":"lending_risk_assess","description":"Evaluates the risk of a proposed lending position before it is opened — fetching live rates, current asset price, and available liquidity from Aave v3, Morpho Blue, and Spark to compute position-specific risk metrics.\nCall this before `lending.supply` and `lending.borrow` whenever an agent is about to open or resize a collateralized borrow; it surfaces the protocol with the lowest borrow APY that accepts the target LTV.\nProvide `collateral` asset symbol (e.g. \"wBTC\", \"wstETH\"), `collateralAmount","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["collateral","collateralAmount","targetLTV"],"properties":{"protocol":{"enum":["aave-v3","morpho","spark","best"],"type":"string","default":"best","description":"Protocol preference"},"targetLTV":{"type":"number","maximum":99,"minimum":1,"description":"Desired LTV percentage (1-99)"},"collateral":{"type":"string","description":"Collateral asset: \"wBTC\", \"tBTC\", \"cbBTC\", \"WETH\", \"wstETH\", \"rETH\", \"cbETH\", \"weETH\""},"borrowAsset":{"type":"string","default":"USDC","description":"Asset to borrow"},"collateralAmount":{"type":"number","description":"Amount of collateral","exclusiveMinimum":0}}},"annotations":{"title":"Risk Assessment","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"lending.risk.assess\" → \"lending_risk_assess\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":350,"tokensAfter":350},{"name":"lending.supply","fixed":{"name":"lending_supply","description":"Generates unsigned ERC-20 approval and pool supply transaction calldata for depositing an asset into Aave v3 (Ethereum, Arbitrum, Base) or Spark (Ethereum).\nCall this when the agent has decided to supply collateral or earn supply APY on a lending protocol; precede it with `lending.rates.query` to confirm the target protocol and chain.\nProvide `protocol` (\"aave-v3\" or \"spark\"), `chain`, `asset` symbol (e.g. \"WETH\", \"USDC\"), human-readable `amount`, and `onBehalfOf` wallet address.\nReturns two tra","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["asset","amount","onBehalfOf"],"properties":{"asset":{"type":"string","description":"Token to supply: \"USDC\", \"WETH\", \"wBTC\", \"tBTC\", \"DAI\", etc."},"chain":{"enum":["ethereum","arbitrum","base"],"type":"string","default":"ethereum","description":"Chain where the pool lives"},"amount":{"type":"string","description":"Amount in human-readable units (e.g. '1000' for 1000 USDC)"},"protocol":{"enum":["aave-v3","spark"],"type":"string","default":"aave-v3","description":"Lending protocol"},"onBehalfOf":{"type":"string","description":"Address that will receive the aToken (usually your own address)"}}},"annotations":{"title":"Supply Collateral","readOnlyHint":false,"openWorldHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"lending.supply\" → \"lending_supply\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":350,"tokensAfter":350},{"name":"lending.withdraw","fixed":{"name":"lending_withdraw","description":"Generates unsigned withdraw transaction calldata to reclaim a supplied asset from Aave v3 (Ethereum, Arbitrum, Base) or Spark (Ethereum).\nCall `lending.position.monitor` first to confirm the withdrawal will not push an outstanding borrow position toward liquidation.\nProvide `protocol`, `chain`, `asset`, a human-readable `amount` or the string \"max\" to withdraw the full supplied balance, and `to` as the recipient address.\nReturns one transaction request; Syenite never holds private keys and no fu","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["asset","amount","to"],"properties":{"to":{"type":"string","description":"Recipient address for withdrawn tokens"},"asset":{"type":"string","description":"Asset to withdraw"},"chain":{"enum":["ethereum","arbitrum","base"],"type":"string","default":"ethereum","description":"Chain"},"amount":{"type":"string","description":"Amount in human-readable units, or \"max\" to withdraw all"},"protocol":{"enum":["aave-v3","spark"],"type":"string","default":"aave-v3","description":"Lending protocol"}}},"annotations":{"title":"Withdraw Collateral","readOnlyHint":false,"openWorldHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"lending.withdraw\" → \"lending_withdraw\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":317,"tokensAfter":317},{"name":"metamorpho.supply","fixed":{"name":"metamorpho_supply","description":"Builds unsigned ERC-20 approval and ERC-4626 deposit transaction calldata for supplying assets into a MetaMorpho curated vault on Ethereum, Base, Arbitrum, or Optimism.\nCall this after selecting a vault from `yield.opportunities` (category \"vault\") or `yield.assess`; use `vault` to target by vault address or a name/curator fragment (e.g. \"Steakhouse\", \"Gauntlet\").\nProvide `vault` identifier, human-readable `amount`, and `receiver` wallet address; the tool resolves vault address, underlying asset","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["vault","amount","receiver"],"properties":{"vault":{"type":"string","description":"Target MetaMorpho vault — address (0x...) or name fragment (e.g. \"Steakhouse USDC\")"},"amount":{"type":"string","description":"Amount to deposit in human units (e.g. '1000' for 1000 USDC)"},"receiver":{"type":"string","description":"Address that receives the vault shares"}}},"annotations":{"title":"MetaMorpho Deposit","readOnlyHint":false,"openWorldHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"metamorpho.supply\" → \"metamorpho_supply\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":281,"tokensAfter":281},{"name":"metamorpho.withdraw","fixed":{"name":"metamorpho_withdraw","description":"Builds an unsigned ERC-4626 redeem transaction calldata to withdraw assets from a MetaMorpho vault on Ethereum, Base, Arbitrum, or Optimism.\nCall this when an agent needs to exit a MetaMorpho vault position; no approval transaction is required for redemption.\nProvide `vault` identifier (address or name fragment), `shares` as a human-readable amount or the string \"max\" to redeem the full balance, `receiver` address to receive underlying assets, and `owner` address whose shares will be burned.\nRet","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["vault","shares","receiver","owner"],"properties":{"owner":{"type":"string","description":"Owner of the shares (must have authorized the caller if different)"},"vault":{"type":"string","description":"MetaMorpho vault — address or name fragment"},"shares":{"type":"string","description":"Share amount in human units, or 'max' to redeem all"},"receiver":{"type":"string","description":"Address that receives the withdrawn underlying"}}},"annotations":{"title":"MetaMorpho Withdraw","readOnlyHint":false,"openWorldHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"metamorpho.withdraw\" → \"metamorpho_withdraw\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":301,"tokensAfter":301},{"name":"prediction.arbitrage","fixed":{"name":"prediction_arbitrage","description":"Scans trending markets on both Polymarket and Kalshi simultaneously, matches markets covering the same underlying question, and surfaces pairs where implied probabilities diverge by more than a threshold. A divergence of 5pp or more suggests one exchange is mispriced or lagging. Returns pairs ranked by divergence, each showing the YES probability on each exchange, which side is higher, and the spread in percentage points. Optionally pass minDivergencePp (default 3) to filter only meaningful gaps","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Max opportunities to return (default 20, max 50)"},"minDivergencePp":{"type":"number","minimum":0,"description":"Minimum probability divergence in percentage points to surface (default 3)"}}},"annotations":{"title":"Cross-Exchange Arbitrage Scanner","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.arbitrage\" → \"prediction_arbitrage\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":251,"tokensAfter":251},{"name":"prediction.book","fixed":{"name":"prediction_book","description":"Fetches the current CLOB order book for a specific Polymarket outcome token, returning top bid and ask levels with sizes, mid-price, spread in both decimal and basis points, and total bid/ask depth in USD. Use this to assess execution quality and market-making opportunities before placing an order — wide spreads indicate higher edge for makers; shallow depth signals potential slippage on larger size. Requires tokenId, which is obtained from the clobTokenIds field in prediction.trending or predic","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["tokenId"],"properties":{"tokenId":{"type":"string","description":"Polymarket outcome token ID (from prediction.trending or prediction.search results)"}}},"annotations":{"title":"Order Book","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.book\" → \"prediction_book\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":221,"tokensAfter":221},{"name":"prediction.compare","fixed":{"name":"prediction_compare","description":"Searches both Polymarket and Kalshi for the same underlying question and returns a side-by-side comparison of implied probabilities, volume, liquidity, and spread. Use this to see where a question is listed on each exchange, whether prices agree, and which venue has better liquidity. Requires query (the topic to search — e.g. \"Trump tariffs\", \"Bitcoin 100k\", \"Fed rate cut\"). Optionally pass minOverlapPct (0–100, default 20) to control how strictly market titles must match across exchanges — lowe","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"query":{"type":"string","description":"Topic to search on both Polymarket and Kalshi (e.g. 'Trump tariffs', 'Bitcoin 100k', 'Fed rate cut')"},"minOverlapPct":{"type":"number","maximum":100,"minimum":0,"description":"Minimum keyword overlap to count as a match (0–100, default 20). Lower = more speculative matches."}}},"annotations":{"title":"Prediction Market Compare","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.compare\" → \"prediction_compare\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":275,"tokensAfter":275},{"name":"prediction.market","fixed":{"name":"prediction_market","description":"Provides a comprehensive deep-dive on a single Polymarket market, returning the question, outcomes with current token prices and probability percentages, price history statistics for the last 24h/7d/30d (open, close, min, max, change), total and 24h volume, liquidity depth, bid-ask spread, one-sided order flow direction, implied probability, resolution criteria, and time remaining until close. Use this after prediction.trending or prediction.search to fully evaluate a market before quoting, orde","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"slug":{"type":"string","description":"Polymarket market slug"},"marketId":{"type":"string","description":"Polymarket market ID"},"conditionId":{"type":"string","description":"Polymarket condition ID (0x-prefixed)"}}},"annotations":{"title":"Market Detail","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.market\" → \"prediction_market\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":239,"tokensAfter":239},{"name":"prediction.order","fixed":{"name":"prediction_order","description":"Constructs a Polymarket CLOB limit order payload ready for EIP-712 off-chain signing and submission to the Polymarket REST API. Polymarket uses off-chain order signing with on-chain settlement — this tool returns the EIP-712 typed-data (domain, types, message) that the agent must sign with its Polygon EOA private key, then POST to https://clob.polymarket.com/order with CLOB API authentication headers; it is not compatible with tx.simulate, tx.verify, or tx.receipt because no on-chain transaction","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["tokenId","side","outcome","size","price","maker"],"properties":{"side":{"enum":["buy","sell"],"type":"string","description":"Direction: buy to open, sell to close"},"size":{"type":"number","description":"Shares","exclusiveMinimum":0},"maker":{"type":"string","description":"Polygon EOA that will sign the EIP-712 order"},"price":{"type":"number","maximum":1,"minimum":0,"description":"Limit price in USDC per share (0-1)"},"outcome":{"enum":["YES","NO"],"type":"string","description":"Outcome token side (YES or NO)"},"tokenId":{"type":"string","description":"Polymarket outcome token ID"},"expiration":{"type":"number","description":"Unix seconds (0 = GTC, default)"}}},"annotations":{"title":"Place Prediction Order","readOnlyHint":false,"openWorldHint":true,"destructiveHint":true}},"changes":[{"kind":"name","detail":"Renamed \"prediction.order\" → \"prediction_order\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":365,"tokensAfter":365},{"name":"prediction.position","fixed":{"name":"prediction_position","description":"Returns all open and recently resolved Polymarket positions for a given Polygon EOA address, including size in outcome shares, average entry price, current market price, realized and unrealized P&L in USDC, percentage P&L, and hours remaining until resolution for each market. Use this to audit an agent's prediction market exposure, calculate portfolio value, or identify positions that are redeemable. Requires a valid Polygon EVM address (0x-prefixed, 40 hex chars); read-only via Polymarket data ","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["address"],"properties":{"address":{"type":"string","description":"Polygon EOA address holding Polymarket positions"}}},"annotations":{"title":"Prediction Positions","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.position\" → \"prediction_position\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":212,"tokensAfter":212},{"name":"prediction.quote","fixed":{"name":"prediction_quote","description":"Simulates a Polymarket CLOB order fill by walking the live order book, computing average fill price, total cost in USDC, slippage from mid-price in percentage and basis points, and available book depth for a given size. Call this before prediction.order to validate that the book can absorb the desired position size at an acceptable price. Requires tokenId (from prediction.trending/search), side (buy or sell), outcome (YES or NO — informational label only), and size in shares; optionally pass ord","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["tokenId","side","outcome","size"],"properties":{"side":{"enum":["buy","sell"],"type":"string","description":"Direction: buy to open a position, sell to close"},"size":{"type":"number","description":"Order size in shares","exclusiveMinimum":0},"outcome":{"enum":["YES","NO"],"type":"string","description":"Informational — used for display only"},"tokenId":{"type":"string","description":"Polymarket outcome token ID"},"orderType":{"enum":["market","limit"],"type":"string","default":"market","description":"Order type: market fills immediately, limit rests in the book"},"limitPrice":{"type":"number","maximum":1,"minimum":0,"description":"Required for limit orders (USDC per share)"}}},"annotations":{"title":"Prediction Quote","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.quote\" → \"prediction_quote\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":369,"tokensAfter":369},{"name":"prediction.search","fixed":{"name":"prediction_search","description":"Searches Polymarket markets by topic keyword and returns matching events with current outcome probabilities, volume, liquidity, and order book metrics including best bid, ask, and spread. Use this when looking for a specific real-world event (elections, crypto price levels, sports outcomes, geopolitical events) rather than browsing by volume. Requires query (the search term); optionally pass limit (1–25, default 10). Returns market slugs and token IDs needed for prediction.market, prediction.boo","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"limit":{"type":"number","default":10,"maximum":25,"minimum":1,"description":"Maximum results to return"},"query":{"type":"string","description":"Search query (e.g. 'Bitcoin price', 'US election', 'Fed rate')"}}},"annotations":{"title":"Search Prediction Markets","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.search\" → \"prediction_search\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":244,"tokensAfter":244},{"name":"prediction.signals","fixed":{"name":"prediction_signals","description":"Scans the top 25 trending Polymarket markets and returns ranked actionable signals across five categories: wide_spread (bid-ask gap above 4% — market-making opportunity), extreme_probability (outcome above 92% or below 8% — contrarian or long-shot play), high_volume (turnover ratio above 5x — active price discovery), deep_liquidity (pool above $100k — safe for large size), and mispriced (outcome probabilities don't sum to 100% — arbitrage opportunity). Use this for autonomous prediction market s","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"number","default":20,"maximum":50,"minimum":1,"description":"Maximum signals to return"},"types":{"type":"array","items":{"enum":["wide_spread","extreme_probability","high_volume","deep_liquidity","mispriced"],"type":"string"},"description":"Filter to specific signal types (defaults to all)"},"minStrength":{"type":"number","default":0,"maximum":100,"minimum":0,"description":"Minimum signal strength (0-100) to include"}}},"annotations":{"title":"Prediction Signals","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.signals\" → \"prediction_signals\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":302,"tokensAfter":302},{"name":"prediction.trending","fixed":{"name":"prediction_trending","description":"Fetches the top trending prediction markets on Polymarket ranked by trading volume, returning market titles, current outcome probabilities (derived from CLOB token prices as 0–100% values), total volume and liquidity in USDC, and bid-ask spread per market. Use this as the starting point for prediction market discovery — call before prediction.market, prediction.book, prediction.quote, or prediction.order to obtain market slugs and token IDs. Optionally pass limit (1–25, default 10) to control re","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"number","default":10,"maximum":25,"minimum":1,"description":"Number of trending markets to return (max 25)"}}},"annotations":{"title":"Trending Markets","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.trending\" → \"prediction_trending\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":215,"tokensAfter":215},{"name":"prediction.watch","fixed":{"name":"prediction_watch","description":"Registers a persistent background monitor for a specific Polymarket market that fires alerts when user-defined conditions are met. Supported conditions (at least one required): oddsThresholdPct (fire when implied probability crosses a target level), oddsMovePct (fire when probability moves by a delta% within a windowMinutes window), liquidityDropPct (fire when liquidity falls by a percentage from baseline), resolutionApproachingHours (fire when the market closes within N hours), and volumeSpikeM","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["conditions"],"properties":{"slug":{"type":"string","description":"Polymarket market slug"},"conditions":{"type":"object","properties":{"oddsMovePct":{"type":"object","required":["delta","windowMinutes"],"properties":{"delta":{"type":"number","description":"Minimum probability shift to trigger (percentage points, e.g. 5)","exclusiveMinimum":0},"windowMinutes":{"type":"number","description":"Time window to measure the move over (minutes)","exclusiveMinimum":0}},"description":"Alert on a significant odds move within a time window"},"liquidityDropPct":{"type":"number","maximum":100,"minimum":0,"description":"Alert when liquidity drops by this percentage"},"oddsThresholdPct":{"type":"number","maximum":100,"minimum":0,"description":"Alert when YES probability crosses this threshold (0-100)"},"volumeSpikeMultiple":{"type":"number","description":"Alert when volume exceeds this multiple of the 24h average (e.g. 3 = 3x spike)","exclusiveMinimum":1},"resolutionApproachingHours":{"type":"number","description":"Alert when resolution is within this many hours","exclusiveMinimum":0}},"description":"At least one condition required"},"webhookUrl":{"type":"string","format":"uri","description":"Optional HTTPS webhook for alert delivery"},"conditionId":{"type":"string","description":"Polymarket condition ID"}}},"annotations":{"title":"Watch Market","readOnlyHint":false,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"prediction.watch\" → \"prediction_watch\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":543,"tokensAfter":543},{"name":"rates.watch","fixed":{"name":"rates_watch","description":"Monitor DeFi lending rates and carry opportunities without polling. Three modes:\n\n• rate — fires rate_spike when borrowAPY or supplyAPY crosses a threshold; fires rate_utilization when utilization exceeds rateUtilizationThreshold (critical at ≥95%). Each protocol/chain/market tracked independently — no false re-fires.\n• carry — fires carry_opportunity when (best supply APY − cheapest borrow APY) exceeds carryThreshold. Replaces manual carry screener polling.\n\nResults persisted across server rest","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["mode"],"properties":{"mode":{"enum":["rate","carry"],"type":"string","description":"rate: APY/utilization threshold; carry: net spread between best supply and cheapest borrow"},"rateChain":{"type":"string","description":"Limit to a specific chain (rate mode, default all)"},"webhookUrl":{"type":"string","description":"HTTP(S) URL to POST alerts to in real-time"},"rateProtocol":{"enum":["aave-v3","morpho","spark","compound-v3","fluid","all"],"type":"string","description":"Limit to a specific protocol (rate mode, default all)"},"rateDirection":{"enum":["above","below"],"type":"string","description":"Direction for APY threshold (default above)"},"carryThreshold":{"type":"number","description":"Minimum net spread % to fire carry_opportunity alert (carry mode)"},"rateCollateral":{"type":"string","description":"Collateral asset, e.g. wBTC, ETH (rate mode)"},"carryCollateral":{"type":"string","description":"Collateral you post to borrow, e.g. wBTC (carry mode)"},"rateBorrowAsset":{"type":"string","description":"Borrow asset, e.g. USDC, USDT (rate mode, default USDC)"},"carryBorrowAsset":{"type":"string","description":"Asset you borrow, e.g. USDC (carry mode)"},"carrySupplyAsset":{"type":"string","description":"Asset you supply/lend — defaults to carryBorrowAsset (carry mode)"},"rateBorrowThreshold":{"type":"number","description":"Borrow APY % to fire at (rate mode)"},"rateSupplyThreshold":{"type":"number","description":"Supply APY % to fire at (rate mode)"},"rateUtilizationThreshold":{"type":"number","maximum":100,"minimum":0,"description":"Utilization % to fire rate_utilization alert at (rate mode). Critical severity at ≥95%."}}},"annotations":{"title":"Watch Rates or Carry Spread","readOnlyHint":false,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"rates.watch\" → \"rates_watch\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":637,"tokensAfter":637},{"name":"strategy.carry.screen","fixed":{"name":"strategy_carry_screen","description":"Screens all DeFi lending markets across Aave v3, Compound V3, Fluid, Morpho Blue, and Spark — plus Pendle PT fixed-rate rows — for positive carry, defined as collateral supply APY minus borrow APY.\nReturns strategies ranked by net carry (highest first), with leveraged carry at 70% of max LTV, estimated annual USD return for a given position size, available liquidity, and utilization.\nCall this to discover self-funding positions where deposited collateral earns more than the cost to borrow agains","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"chain":{"enum":["ethereum","arbitrum","base","all"],"type":"string","default":"all","description":"Chain filter"},"minCarry":{"type":"number","description":"Minimum net carry % to include (e.g. 0 for positive-only)"},"collateral":{"type":"string","default":"all","description":"Collateral filter: specific asset, \"BTC\", \"ETH\", or \"all\""},"borrowAsset":{"type":"string","default":"USDC","description":"Borrow asset"},"positionSizeUSD":{"type":"number","default":100000,"description":"Position size in USD for annual return calculation"}}},"annotations":{"title":"Carry Screener","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"strategy.carry.screen\" → \"strategy_carry_screen\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":332,"tokensAfter":332},{"name":"swap.multi","fixed":{"name":"swap_multi","description":"Fetches up to 10 swap or bridge quotes in a single batched call, executing all route lookups in parallel and returning each result alongside a total cost summary. Use this when splitting funds across multiple chains, executing multi-leg portfolio rebalancing, or comparing routes side-by-side without making sequential calls. Each element in the requests array accepts the same parameters as swap.quote (fromToken, toToken, fromAmount, fromAddress, fromChain, toChain, slippage, order). Returns per-r","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["requests"],"properties":{"requests":{"type":"array","items":{"type":"object","required":["fromToken","toToken","fromAmount","fromAddress"],"properties":{"order":{"enum":["CHEAPEST","FASTEST"],"type":"string","description":"Route preference: CHEAPEST (best price) or FASTEST (lowest execution time)"},"toChain":{"type":"string","description":"Destination chain"},"toToken":{"type":"string","description":"Token to buy — symbol or address"},"slippage":{"type":"number","description":"Max slippage as decimal (0.005 = 0.5%). Defaults to 0.5%."},"fromChain":{"type":"string","default":"ethereum","description":"Source chain"},"fromToken":{"type":"string","description":"Token to sell — symbol or address"},"toAddress":{"type":"string","description":"Recipient address"},"fromAmount":{"type":"string","description":"Amount in smallest unit"},"fromAddress":{"type":"string","description":"Sender wallet address"}}},"maxItems":10,"minItems":1,"description":"Array of swap/bridge requests to quote in parallel"}}},"annotations":{"title":"Batch Swap Quotes","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"swap.multi\" → \"swap_multi\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":456,"tokensAfter":456},{"name":"swap.quote","fixed":{"name":"swap_quote","description":"Fetches an optimal swap or bridge quote across 30+ EVM chains and Solana using the LI.FI aggregator (EVM) or Jupiter (Solana), comparing routes from DEXs and bridges including 1inch, 0x, Paraswap, and major cross-chain bridges to find the best price with lowest fees. Call this before any token exchange to obtain a quote; then pass the returned unsigned transaction calldata to a wallet for signing and submission — Syenite never holds or touches private keys. Provide fromToken, toToken, fromAmount","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["fromToken","toToken","fromAmount","fromAddress"],"properties":{"order":{"enum":["CHEAPEST","FASTEST"],"type":"string","default":"CHEAPEST","description":"Route preference: CHEAPEST (best price) or FASTEST (lowest execution time)"},"toChain":{"type":"string","description":"Destination chain (defaults to fromChain). Set differently for cross-chain bridges."},"toToken":{"type":"string","description":"Token to buy — symbol (e.g. \"WETH\", \"USDT\") or contract address"},"slippage":{"type":"number","default":0.005,"maximum":0.5,"minimum":0.001,"description":"Max slippage as decimal (0.005 = 0.5%)"},"fromChain":{"type":"string","default":"ethereum","description":"Source chain: \"ethereum\", \"arbitrum\", \"optimism\", \"base\", \"polygon\", \"bsc\", \"avalanche\", or chain ID"},"fromToken":{"type":"string","description":"Token to sell — symbol (e.g. \"USDC\", \"ETH\") or contract address"},"toAddress":{"type":"string","description":"Recipient address (defaults to fromAddress)"},"fromAmount":{"type":"string","description":"Amount to swap in smallest unit (e.g. 1000000 for 1 USDC with 6 decimals). Use token decimals."},"fromAddress":{"type":"string","description":"Sender wallet address (used for routing and approval checks)"}}},"annotations":{"title":"Swap / Bridge Quote","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"swap.quote\" → \"swap_quote\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":521,"tokensAfter":521},{"name":"swap.status","fixed":{"name":"swap_status","description":"Tracks the execution status of a cross-chain bridge transaction submitted after a swap.quote call, polling LI.FI's bridge monitoring API to report whether the transfer is PENDING, DONE, or FAILED. Call this after submitting a cross-chain transaction — same-chain swaps settle immediately and do not require polling. Requires txHash (the sending transaction hash); supply fromChain and toChain for faster resolution, or omit to default to ethereum. Returns current status, substatus, receiving transac","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["txHash"],"properties":{"txHash":{"type":"string","description":"Transaction hash of the submitted swap/bridge"},"toChain":{"type":"string","description":"Destination chain (for cross-chain bridges)"},"fromChain":{"type":"string","default":"ethereum","description":"Chain where the transaction was submitted"}}},"annotations":{"title":"Swap Status","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"swap.status\" → \"swap_status\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":263,"tokensAfter":263},{"name":"syenite.help","fixed":{"name":"syenite_help","description":"Get information about Syenite — real-time lending rates, yield, and position alerts for AI agents. Covers Aave, Morpho, Compound, Spark, and Pendle. Also: swap/bridge routing (30+ chains), lending execution, prediction markets, carry screening, and a trust layer for transaction verification.\nCall this tool to learn what tools are available and how to use them.","inputSchema":{"type":"object","properties":{}},"annotations":{"title":"Syenite Help","readOnlyHint":true,"openWorldHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"syenite.help\" → \"syenite_help\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":126,"tokensAfter":126},{"name":"token.price","fixed":{"name":"token_price","description":"Returns the current USD price for one or more tokens by reading Chainlink on-chain price feed contracts directly — the same oracles that Aave, Morpho, Spark, and Compound use to trigger liquidations. Use this for portfolio valuation, P&L calculation, health-factor estimation, and policy enforcement where prices must match what lending protocols see. Pass symbol for a single token or symbols (array, max 20) for a batch lookup; results are cached for 60 seconds. Supported tokens: wBTC, tBTC, cbBTC","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"symbol":{"type":"string","default":"WETH","description":"Token symbol (e.g. wBTC, WETH, USDC). Ignored when symbols is provided."},"symbols":{"type":"array","items":{"type":"string"},"description":"Batch: array of token symbols to price in one call (up to 20)"}}},"annotations":{"title":"Token Price","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"token.price\" → \"token_price\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":251,"tokensAfter":251},{"name":"tx.guard","fixed":{"name":"tx_guard","description":"Evaluates a proposed transaction against a caller-supplied set of risk rules before signing, returning a per-rule pass/fail/skip breakdown and an overall approved verdict. Rules are caller-defined — Syenite does not impose or modify them. Supported rules: maxValueNative (cap native token value), allowedContracts (allowlist of target addresses), blockedContracts (denylist), allowedFunctions (function selector filter), requireVerifiedContract (flag if contract is unverified — requires prior tx.ver","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["transaction","rules"],"properties":{"chain":{"type":"string","description":"Chain name (defaults to ethereum)"},"rules":{"type":"object","properties":{"maxGasLimit":{"type":"number","description":"Maximum gas limit"},"maxValueNative":{"type":"string","description":"Max native token value (e.g. '0.1' for 0.1 ETH)"},"allowedContracts":{"type":"array","items":{"type":"string"},"description":"Allowlisted contract addresses"},"allowedFunctions":{"type":"array","items":{"type":"string"},"description":"Permitted function selectors or names"},"blockedContracts":{"type":"array","items":{"type":"string"},"description":"Blocklisted contract addresses"},"requireAllowlisted":{"type":"boolean","description":"Require contract in Syenite protocol registry"},"requireVerifiedContract":{"type":"boolean","description":"Require Etherscan/Sourcify verified"}}},"transaction":{"type":"object","required":["to"],"properties":{"to":{"type":"string","description":"Target address"},"data":{"type":"string","description":"Calldata"},"value":{"type":"string","description":"Native value (wei)"},"chainId":{"type":"number","description":"EIP-155 chain ID"},"gasLimit":{"type":"string","description":"Gas limit as decimal string"}}}}},"annotations":{"title":"Transaction Guard","readOnlyHint":true,"openWorldHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"tx.guard\" → \"tx_guard\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":514,"tokensAfter":514},{"name":"tx.receipt","fixed":{"name":"tx_receipt","description":"Fetches and decodes an on-chain transaction receipt from any supported EVM chain, returning confirmation status (confirmed or reverted), gas used and effective gas price, cost in both native token and USD, block number, all contracts interacted with, decoded event logs (Transfer, Approval, Swap, Aave Supply/Borrow/Repay, and others), and a direct block explorer URL. Use after submitting any transaction — swap, supply, borrow, repay, bridge, or approval — to confirm execution and close the strate","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["txHash"],"properties":{"chain":{"type":"string","default":"ethereum","description":"Chain: ethereum, arbitrum, base, bsc (or chain ID)"},"txHash":{"type":"string","description":"Transaction hash to look up"}}},"annotations":{"title":"Transaction Receipt","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"tx.receipt\" → \"tx_receipt\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":235,"tokensAfter":235},{"name":"tx.simulate","fixed":{"name":"tx_simulate","description":"Simulates an unsigned EVM transaction against live chain state using eth_call and eth_estimateGas, returning whether the call would succeed or revert (with revert reason), estimated gas units, approximate gas cost in USD, and native token balance changes from the transaction value. Use this to independently verify what a transaction will do before signing — particularly useful when the transaction was constructed by a third party. Requires transaction.to, transaction.from, transaction.data, and ","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["transaction"],"properties":{"chain":{"type":"string","description":"Chain name or ID (defaults to tx chainId or ethereum)"},"transaction":{"type":"object","required":["to","data","from"],"properties":{"to":{"type":"string","description":"Target contract address"},"data":{"type":"string","description":"Calldata (hex)"},"from":{"type":"string","description":"Sender address"},"value":{"type":"string","description":"Native token value (hex or decimal wei)"},"chainId":{"type":"number","description":"EIP-155 chain ID (e.g. 1 for Ethereum, 42161 for Arbitrum)"}}}}},"annotations":{"title":"Simulate Transaction","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"tx.simulate\" → \"tx_simulate\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":334,"tokensAfter":334},{"name":"tx.verify","fixed":{"name":"tx_verify","description":"Cross-references a transaction target address against Etherscan (source code verification), Sourcify (independent verification), and Syenite's curated protocol registry to confirm the contract's identity and surface risk flags before signing. Use this to verify any EVM transaction target — not just Syenite-generated ones — as a mandatory pre-signing check in autonomous agent workflows. Requires to (the contract address, 0x-prefixed) and chain (ethereum, arbitrum, base, or bsc); optionally pass d","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["to","chain"],"properties":{"to":{"type":"string","description":"Contract address to verify"},"data":{"type":"string","description":"Calldata — if provided, decodes the function being called"},"chain":{"type":"string","description":"Chain name: ethereum, arbitrum, base, bsc"}}},"annotations":{"title":"Verify Contract","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"tx.verify\" → \"tx_verify\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":254,"tokensAfter":254},{"name":"wallet.balances","fixed":{"name":"wallet_balances","description":"Returns native gas token and major stablecoin balances for any EVM or Solana address across supported chains, reading directly from on-chain RPC with no third-party indexer dependency. Accepts an EVM 0x-address (queries Ethereum, Arbitrum, Base, BNB Chain, and Optimism) or a Solana base58 pubkey (queries native SOL and all non-zero SPL token accounts) — address format is detected automatically. Optionally pass chains to restrict the query to specific chains and reduce latency. Use this before ex","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["address"],"properties":{"chains":{"type":"array","items":{"enum":["ethereum","arbitrum","base","bsc"],"type":"string"},"description":"Chains to query (defaults to all: ethereum, arbitrum, base, bsc)"},"address":{"type":"string","description":"EVM address to check"}}},"annotations":{"title":"Wallet Balances","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"wallet.balances\" → \"wallet_balances\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":252,"tokensAfter":252},{"name":"yield.assess","fixed":{"name":"yield_assess","description":"Provides a structured risk assessment for a specific DeFi yield opportunity before committing capital — covering smart contract risk, oracle configuration, governance model, liquidity and exit risk, depeg/peg risk, and position sizing relative to TVL.\nCall this after `yield.opportunities` when an agent or user wants to evaluate a specific protocol and product in depth rather than just comparing APYs.\nProvide `protocol` (e.g. \"Aave v3\", \"Morpho\", \"Lido\") and optionally `product` to disambiguate v","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["protocol"],"properties":{"asset":{"type":"string","default":"all","description":"Asset context for finding alternatives"},"amount":{"type":"number","description":"Amount in USD to deposit (optional, enables position sizing analysis)"},"product":{"type":"string","description":"Specific product name (optional, helps match the right source)"},"protocol":{"type":"string","description":"Protocol to assess: \"Aave\", \"Lido\", \"Morpho\", \"Ethena\", \"Yearn\", \"Maker\", \"Rocket Pool\", \"Coinbase\""}}},"annotations":{"title":"Yield Risk Assessment","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"yield.assess\" → \"yield_assess\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":320,"tokensAfter":320},{"name":"yield.opportunities","fixed":{"name":"yield_opportunities","description":"Aggregates and ranks live DeFi yield opportunities for any asset across lending supply (Aave, Morpho Blue, Spark), liquid staking (Lido, Rocket Pool, Coinbase), savings rates (Maker DSR/sDAI), curated vaults (MetaMorpho, Yearn), fixed-yield Pendle PTs, and basis capture (Ethena sUSDe) on EVM chains, plus Kamino, MarginFi, Jito, Marinade, and Drift on Solana.\nCall this to discover where to deploy capital before deciding on a protocol; follow up with `yield.assess` to evaluate the risk of a specif","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"tags":{"type":"array","items":{"type":"string"},"description":"Tag filters: [\"fixed-yield\"] isolates Pendle PT; [\"yt\",\"leveraged-variable\"] surfaces Pendle YT (hidden by default)"},"asset":{"type":"string","default":"all","description":"Asset to find yield for: \"ETH\", \"USDC\", \"DAI\", \"WETH\", \"USDe\", \"stables\", or \"all\""},"category":{"type":"string","default":"all","description":"Yield category filter: \"lending-supply\", \"liquid-staking\", \"vault\", \"savings-rate\", \"basis-capture\", or \"all\""},"riskTolerance":{"enum":["low","medium","high"],"type":"string","default":"high","description":"Maximum risk level to show: \"low\", \"medium\", or \"high\" (default, shows all)"}}},"annotations":{"title":"Yield Opportunities","readOnlyHint":true,"openWorldHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"yield.opportunities\" → \"yield_opportunities\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":376,"tokensAfter":376}],"toolsChanged":46,"tokensSaved":0,"todo":[{"tool":"tx_guard","params":["rules","transaction"]},{"tool":"tx_simulate","params":["transaction"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}