{"apiVersion":"v1","directorySlug":"lotuslabs-mcp-a8bf8356aa","title":"Lotus Protocol | DeFi Yields You Can Underwrite","description":"Onchain credit markets built for underwriting. Every level of risk has its own rate and exposure. Together they form a single curve.","pageUrl":"https://www.mcpbundles.com/skills/lotuslabs-mcp-a8bf8356aa","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.lotuslabs.net/mcp","hostedMcpUrl":null,"toolCount":31,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"net.lotuslabs/lotuslabs-mcp-a8bf8356aa","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"getConcentration","description":"Borrower concentration — Returns borrower-concentration metrics for a market: the Herfindahl-Hirschman index over borrower debt, the debt share held by the five largest borrowers, the single largest debt position (raw + USD), the number of accounts borrowing across more than one tranche, and the total open-position count. Open — no auth.","inputSchema":{"type":"object","required":["chainId","marketId"],"properties":{"chainId":{"type":"number","example":31337},"marketId":{"type":"string","example":"0x032aa6213318cf14d8f49ce33ba5d00599d5cb7a154b1496af0b4b7bc2d36215","pattern":"^0x[a-fA-F0-9]{64}$"}}},"logicalName":"getConcentration","displayName":"getConcentration","title":"getConcentration","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getDeploymentByChain","description":"Deployment by chain — Lotus contract deployment for a single chain id. Returns 404 when the chain has no deployment. Open — no auth.","inputSchema":{"type":"object","required":["chainId"],"properties":{"chainId":{"type":"number","example":31337,"minimum":1}}},"logicalName":"getDeploymentByChain","displayName":"getDeploymentByChain","title":"getDeploymentByChain","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getHealth","description":"Health check — Liveness probe — returns { status: \"ok\" } when the server is up.","inputSchema":{"type":"object","properties":{}},"logicalName":"getHealth","displayName":"getHealth","title":"getHealth","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getLiquidationAtShock","description":"Liquidation at shock — Simulates a set of instantaneous collateral-price drops and returns, per shock, the debt that would become liquidatable (raw + USD) and the number of positions that would fall below their liquidation threshold. Shocks are supplied as a comma-separated list of fractional drops (0.25 = -25%). Open — no auth.","inputSchema":{"type":"object","required":["chainId","marketId"],"properties":{"shocks":{"type":"string","default":"0.25,0.5,0.75","example":"0.25,0.5,0.75"},"chainId":{"type":"number","example":31337},"marketId":{"type":"string","example":"0x032aa6213318cf14d8f49ce33ba5d00599d5cb7a154b1496af0b4b7bc2d36215","pattern":"^0x[a-fA-F0-9]{64}$"}}},"logicalName":"getLiquidationAtShock","displayName":"getLiquidationAtShock","title":"getLiquidationAtShock","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getMarket","description":"Get a market — Returns one market by chain id + on-chain market id: loan/collateral assets, oracle / rate-model / liquidation-module addresses, the LLTV rungs, aggregate state (supply, borrow, utilization, borrower/supplier counts), and a freshness envelope. Open — no auth.","inputSchema":{"type":"object","required":["chainId","marketId"],"properties":{"chainId":{"type":"number","example":31337},"marketId":{"type":"string","example":"0x032aa6213318cf14d8f49ce33ba5d00599d5cb7a154b1496af0b4b7bc2d36215","pattern":"^0x[a-fA-F0-9]{64}$"}}},"logicalName":"getMarket","displayName":"getMarket","title":"getMarket","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getMarketStatus","description":"Market health status — Lightweight market health check for poll pacing: severity (normal / elevated / critical), the triggers that fired (at-risk debt share, per-tranche utilization), and an advisory poll interval. Open — no auth.","inputSchema":{"type":"object","required":["chainId","marketId"],"properties":{"chainId":{"type":"number","example":31337},"marketId":{"type":"string","example":"0x032aa6213318cf14d8f49ce33ba5d00599d5cb7a154b1496af0b4b7bc2d36215","pattern":"^0x[a-fA-F0-9]{64}$"}}},"logicalName":"getMarketStatus","displayName":"getMarketStatus","title":"getMarketStatus","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getPrices","description":"Asset prices — Best-effort USD prices for every market asset (loan + collateral tokens), derived from the latest oracle snapshot. Each entry carries the token address, symbol, decimals, price in USD, and the timestamp the price was observed at; any of these may be null when no snapshot is available. Pass an optional chainId to scope the result to a single chain, otherwise assets across all indexed chains are returned. Open — no auth.","inputSchema":{"type":"object","properties":{"chainId":{"type":"number","example":31337}}},"logicalName":"getPrices","displayName":"getPrices","title":"getPrices","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getTranche","description":"Get a tranche — Returns one LLTV tranche of a market by its index: LLTV, label, per-tranche state (supply, borrow, utilization, supply/borrow rates, junior/free supply, borrower count), the cascade loan mix, and a freshness envelope. Open — no auth.","inputSchema":{"type":"object","required":["chainId","marketId","index"],"properties":{"index":{"type":"integer","example":6,"maximum":9007199254740991,"minimum":0},"chainId":{"type":"number","example":31337},"marketId":{"type":"string","example":"0x032aa6213318cf14d8f49ce33ba5d00599d5cb7a154b1496af0b4b7bc2d36215","pattern":"^0x[a-fA-F0-9]{64}$"}}},"logicalName":"getTranche","displayName":"getTranche","title":"getTranche","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getTrancheRateHistory","description":"Tranche rate history — Returns a time-series of a tranche's supply APY, borrow APR, and utilization, sampled at the requested interval. Bound the window with the optional `from`/`to` ISO timestamps; `interval` selects hourly or daily buckets (default daily). Open — no auth.","inputSchema":{"type":"object","required":["chainId","marketId","index"],"properties":{"to":{"example":"2026-07-01T00:00:00.000Z"},"from":{"example":"2026-06-01T00:00:00.000Z"},"index":{"type":"integer","example":6,"maximum":9007199254740991,"minimum":0},"chainId":{"type":"number","example":31337},"interval":{"enum":["hour","day"],"type":"string","default":"day","example":"day"},"marketId":{"type":"string","example":"0x032aa6213318cf14d8f49ce33ba5d00599d5cb7a154b1496af0b4b7bc2d36215","pattern":"^0x[a-fA-F0-9]{64}$"}}},"logicalName":"getTrancheRateHistory","displayName":"getTrancheRateHistory","title":"getTrancheRateHistory","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getVault","description":"Get a vault — Returns one curated vault by chain id + address: metadata (name, symbol, curator, deposit asset, risk mandate), the role set (owner / curator / allocators / sentinels), aggregate state (total assets, share price, APY, idle liquidity), the current allocation breakdown across tranches and external 4626 adapters, and a freshness envelope. Open — no auth.","inputSchema":{"type":"object","required":["chainId","address"],"properties":{"address":{"type":"string","example":"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599","pattern":"^0x[a-fA-F0-9]{40}$"},"chainId":{"type":"number","example":31337}}},"logicalName":"getVault","displayName":"getVault","title":"getVault","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getVaultEffectiveLoanMix","description":"Vault effective loan mix — Returns the vault's cascade-aware borrow-side exposure: the vault's allocations composed with each tranche's underlying loan mix, collapsed per (marketId, trancheIndex) into asset-unit amounts and a fraction (`pct`) of total exposure. Use this to see where deposited capital is ultimately lent. Open — no auth.","inputSchema":{"type":"object","required":["chainId","address"],"properties":{"address":{"type":"string","example":"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599","pattern":"^0x[a-fA-F0-9]{40}$"},"chainId":{"type":"number","example":31337}}},"logicalName":"getVaultEffectiveLoanMix","displayName":"getVaultEffectiveLoanMix","title":"getVaultEffectiveLoanMix","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"getVaultRateHistory","description":"Vault rate history — Returns a time-series of the vault's net APY and share price. Bound the window with the optional `from` / `to` ISO timestamps and pick the bucket size with `interval` (`hour` or `day`, default `day`). Open — no auth.","inputSchema":{"type":"object","required":["chainId","address"],"properties":{"to":{},"from":{},"address":{"type":"string","example":"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599","pattern":"^0x[a-fA-F0-9]{40}$"},"chainId":{"type":"number","example":31337},"interval":{"enum":["hour","day"],"type":"string","default":"day"}}},"logicalName":"getVaultRateHistory","displayName":"getVaultRateHistory","title":"getVaultRateHistory","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"listBorrowers","description":"List borrowers — Returns the whole borrower book for a market: real wallet addresses plus raw on-chain primitives (borrow shares, collateral, debt assets) and derived risk metrics (health factor, risk band, LTV, USD values, liquidation price). Paginates by account cursor and can be filtered to a single tranche. Open — no auth.","inputSchema":{"type":"object","required":["chainId","marketId"],"properties":{"after":{"type":"string"},"first":{"type":"integer","default":200,"maximum":500,"minimum":1},"account":{"type":"string","example":"0x12bf433ce0a7d9dd5ea120f7fc5707e65bc9b26e","pattern":"^0x[a-fA-F0-9]{40}$"},"chainId":{"type":"number","example":31337},"marketId":{"type":"string","example":"0x032aa6213318cf14d8f49ce33ba5d00599d5cb7a154b1496af0b4b7bc2d36215","pattern":"^0x[a-fA-F0-9]{64}$"},"trancheIndex":{"type":"integer","maximum":9007199254740991,"minimum":0}}},"logicalName":"listBorrowers","displayName":"listBorrowers","title":"listBorrowers","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"listDeployments","description":"Deployments — Lotus contract deployment addresses for every served chain — core protocol (lotus, riskEngine, oracle, liquidation module), bundler3 + permit2, and the vault-factory stack (vaultV2Factory, lotusVaultFactory, lotusAdapterRegistry, lotusLens, erc4626LotusBundlerAdapter) — one entry per chain (with its `chainId`, `network`, and deploy block). `source` is `redis` when served from the live registry, `static` when from the committed build. Open — no auth.","inputSchema":{"type":"object","properties":{}},"logicalName":"listDeployments","displayName":"listDeployments","title":"listDeployments","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"listEvents","description":"Market events — Returns the on-chain event stream for a market (SUPPLY, SUPPLY_COLLATERAL, BORROW, REPAY, WITHDRAW, WITHDRAW_COLLATERAL, LIQUIDATE), newest first. Each event carries the real wallet address, tranche index, raw asset amount, tx hash and log index. Optionally filter by account and/or a comma-separated set of event types, and paginate with a cursor. Open — no auth.","inputSchema":{"type":"object","required":["chainId","marketId"],"properties":{"after":{"type":"string"},"first":{"type":"integer","default":50,"maximum":200,"minimum":1},"types":{"type":"string"},"account":{"type":"string","example":"0x12bf433ce0a7d9dd5ea120f7fc5707e65bc9b26e","pattern":"^0x[a-fA-F0-9]{40}$"},"chainId":{"type":"number","example":31337},"marketId":{"type":"string","example":"0x032aa6213318cf14d8f49ce33ba5d00599d5cb7a154b1496af0b4b7bc2d36215","pattern":"^0x[a-fA-F0-9]{64}$"}}},"logicalName":"listEvents","displayName":"listEvents","title":"listEvents","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"listMarkets","description":"List markets — Returns a cursor-paginated list of markets with headline state (loan/collateral assets, LLTV rungs, aggregate supply/borrow/utilization, borrower/supplier counts) and a per-market freshness envelope. Optionally filter by chain id. Open — no auth.","inputSchema":{"type":"object","properties":{"after":{"type":"string"},"first":{"type":"integer","default":50,"maximum":200,"minimum":1},"chainId":{"type":"number","example":31337}}},"logicalName":"listMarkets","displayName":"listMarkets","title":"listMarkets","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"listPositions","description":"List positions — Every position across every market and vault, one entry per position: a market entry is one tranche of one account's position (borrow and supply legs, either may be null), a vault entry is one account's share balance. Filter by account, chain, market or kind; all filters are optional and combine. A single cursor walks markets, lending vaults and carry vaults in one ordered list. Addresses are matched case-insensitively. Open — no auth.","inputSchema":{"type":"object","properties":{"after":{"type":"string"},"first":{"type":"integer","default":100,"maximum":500,"minimum":1},"kinds":{"type":"string"},"account":{"type":"string","example":"0x12bf433ce0a7d9dd5ea120f7fc5707e65bc9b26e","pattern":"^0x[a-fA-F0-9]{40}$"},"chainId":{"type":"number","example":31337},"marketId":{"type":"string"}}},"logicalName":"listPositions","displayName":"listPositions","title":"listPositions","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"listRiskRatings","description":"Risk ratings — Federated risk ratings (Credora) across every rated market, tranche, and vault. Each entry identifies the chain, product (market, tranche, or vault), on-chain market id (null for vaults), optional tranche index, and vault address (null for market/tranche), alongside a rating envelope: provider, raw 1–10 score (D=1 … A+=10, 10 = safest), DeFi letter grade, rating type (INDICATIVE / COMMISSIONED), probability of significant loss (PSL), methodology reference, publish date, and histor","inputSchema":{"type":"object","properties":{"chainId":{"type":"number","example":31337}}},"logicalName":"listRiskRatings","displayName":"listRiskRatings","title":"listRiskRatings","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"listSuppliers","description":"List suppliers — Returns the whole supplier book for a market: real wallet addresses plus raw on-chain primitives (tranche index, supply shares). Paginates by account cursor and can be filtered to a single tranche. Open — no auth.","inputSchema":{"type":"object","required":["chainId","marketId"],"properties":{"after":{"type":"string"},"first":{"type":"integer","default":200,"maximum":500,"minimum":1},"account":{"type":"string","example":"0x12bf433ce0a7d9dd5ea120f7fc5707e65bc9b26e","pattern":"^0x[a-fA-F0-9]{40}$"},"chainId":{"type":"number","example":31337},"marketId":{"type":"string","example":"0x032aa6213318cf14d8f49ce33ba5d00599d5cb7a154b1496af0b4b7bc2d36215","pattern":"^0x[a-fA-F0-9]{64}$"},"trancheIndex":{"type":"integer","maximum":9007199254740991,"minimum":0}}},"logicalName":"listSuppliers","displayName":"listSuppliers","title":"listSuppliers","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"listTranches","description":"List tranches — Returns every LLTV tranche of a market, ordered by LLTV, each with its per-tranche state (supply, borrow, utilization, supply/borrow rates, junior/free supply, borrower count) and the cascade loan mix showing how this tranche's supply is spread across its own and lower tranches' borrowing. Open — no auth.","inputSchema":{"type":"object","required":["chainId","marketId"],"properties":{"chainId":{"type":"number","example":31337},"marketId":{"type":"string","example":"0x032aa6213318cf14d8f49ce33ba5d00599d5cb7a154b1496af0b4b7bc2d36215","pattern":"^0x[a-fA-F0-9]{64}$"}}},"logicalName":"listTranches","displayName":"listTranches","title":"listTranches","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"listVaults","description":"List vaults — Returns a cursor-paginated list of curated vaults, each with metadata (name, symbol, curator, deposit asset, risk mandate), roles, aggregate state (total assets, share price, APY, idle liquidity), allocation breakdown, and a freshness envelope. Optionally filter by chain id; page through results with `first` + `after` (the previous page's `pagination.nextCursor`). Open — no auth.","inputSchema":{"type":"object","properties":{"after":{"type":"string"},"first":{"type":"integer","default":50,"maximum":200,"minimum":1},"chainId":{"type":"number"}}},"logicalName":"listVaults","displayName":"listVaults","title":"listVaults","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"planBorrow","description":"Build the calls to supply collateral and borrow against it in one bundle. Returns unsigned calls ({to, data, value}) plus the step breakdown. Nothing is signed or broadcast — pass the calls to a wallet, or to simulateBundle first.","inputSchema":{"type":"object","required":["chainId","marketId","trancheIndex","collateralAmount","borrowAmount","user"],"properties":{"user":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"chainId":{"type":"number"},"marketId":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"borrowAmount":{"type":"string"},"trancheIndex":{"type":"number"},"collateralAmount":{"type":"string"}}},"logicalName":"planBorrow","displayName":"planBorrow","title":"planBorrow","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"planSupply","description":"Build the calls to supply loan tokens to a market tranche. Returns unsigned calls ({to, data, value}) plus the step breakdown. Nothing is signed or broadcast — pass the calls to a wallet, or to simulateBundle first.","inputSchema":{"type":"object","required":["chainId","marketId","trancheIndex","amount","user"],"properties":{"user":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"amount":{"type":"string"},"chainId":{"type":"number"},"marketId":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"trancheIndex":{"type":"number"}}},"logicalName":"planSupply","displayName":"planSupply","title":"planSupply","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"planWithdraw","description":"Build the calls to withdraw supplied loan tokens from a market tranche. Returns unsigned calls ({to, data, value}) plus the step breakdown. Nothing is signed or broadcast — pass the calls to a wallet, or to simulateBundle first.","inputSchema":{"type":"object","required":["chainId","marketId","trancheIndex","amount","user"],"properties":{"user":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"amount":{"type":"string"},"chainId":{"type":"number"},"marketId":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"trancheIndex":{"type":"number"},"isFullWithdraw":{"type":"boolean"}}},"logicalName":"planWithdraw","displayName":"planWithdraw","title":"planWithdraw","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"planRepay","description":"Build the calls to repay borrowed assets, optionally withdrawing collateral in the same bundle. Set repayAll to clear the position — the current debt is read from the API, so no dust is left behind by interest accruing between quote and execution. Returns unsigned calls ({to, data, value}) plus the step breakdown. Nothing is signed or broadcast — pass the calls to a wallet, or to simulateBundle first.","inputSchema":{"type":"object","required":["chainId","marketId","trancheIndex","user"],"properties":{"user":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"amount":{"type":"string"},"chainId":{"type":"number"},"marketId":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"repayAll":{"type":"boolean"},"trancheIndex":{"type":"number"},"withdrawCollateral":{"type":"string"}}},"logicalName":"planRepay","displayName":"planRepay","title":"planRepay","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"planAdjustPosition","description":"Build the calls to change an existing borrow position: add or remove collateral, borrow more or repay, in any combination, as one bundle. Returns unsigned calls ({to, data, value}) plus the step breakdown. Nothing is signed or broadcast — pass the calls to a wallet, or to simulateBundle first.","inputSchema":{"type":"object","required":["chainId","marketId","trancheIndex","collateralDirection","collateralAmount","loanDirection","loanAmount","user"],"properties":{"user":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"chainId":{"type":"number"},"marketId":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"loanAmount":{"type":"string"},"trancheIndex":{"type":"number"},"loanDirection":{"enum":["add","remove"],"type":"string"},"collateralAmount":{"type":"string"},"collateralDirection":{"enum":["add","remove"],"type":"string"}}},"logicalName":"planAdjustPosition","displayName":"planAdjustPosition","title":"planAdjustPosition","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"planVaultSupply","description":"Build the calls to deposit into a Lotus vault. Returns unsigned calls ({to, data, value}) plus the step breakdown. Nothing is signed or broadcast — pass the calls to a wallet, or to simulateBundle first.","inputSchema":{"type":"object","required":["chainId","vaultAddress","amount","user"],"properties":{"user":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"amount":{"type":"string"},"chainId":{"type":"number"},"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}}},"logicalName":"planVaultSupply","displayName":"planVaultSupply","title":"planVaultSupply","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"planVaultWithdraw","description":"Build the calls to redeem from a Lotus vault. Returns unsigned calls ({to, data, value}) plus the step breakdown. Nothing is signed or broadcast — pass the calls to a wallet, or to simulateBundle first.","inputSchema":{"type":"object","required":["chainId","vaultAddress","amount","user"],"properties":{"user":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"amount":{"type":"string"},"chainId":{"type":"number"},"withdrawAll":{"type":"boolean"},"vaultAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}}},"logicalName":"planVaultWithdraw","displayName":"planVaultWithdraw","title":"planVaultWithdraw","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"planMigrateSupply","description":"Build the calls to move a supply position from one tranche to another in a single bundle — withdraw and re-supply, without returning funds to the wallet in between. Returns unsigned calls ({to, data, value}) plus the step breakdown. Nothing is signed or broadcast — pass the calls to a wallet, or to simulateBundle first.","inputSchema":{"type":"object","required":["chainId","marketId","trancheIndex","targetTrancheIndex","amount","user"],"properties":{"user":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"amount":{"type":"string"},"chainId":{"type":"number"},"marketId":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"trancheIndex":{"type":"number"},"targetTrancheIndex":{"type":"number"}}},"logicalName":"planMigrateSupply","displayName":"planMigrateSupply","title":"planMigrateSupply","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"planMigrateBorrow","description":"Build the calls to move a borrow position to a different tranche — repay here, re-borrow there, collateral carried across, in one bundle. The debt to migrate is read from the API rather than supplied, so interest accrued since the last quote is covered. Also returns migrateRepayAmount, the debt the bundle repays. Returns unsigned calls ({to, data, value}) plus the step breakdown. Nothing is signed or broadcast — pass the calls to a wallet, or to simulateBundle first.","inputSchema":{"type":"object","required":["chainId","marketId","trancheIndex","targetTrancheIndex","user"],"properties":{"user":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"chainId":{"type":"number"},"marketId":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"trancheIndex":{"type":"number"},"targetTrancheIndex":{"type":"number"}}},"logicalName":"planMigrateBorrow","displayName":"planMigrateBorrow","title":"planMigrateBorrow","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"simulateBundle","description":"Run a bundle against current chain state without broadcasting. Calls execute in order, each seeing what the previous one left, so a supply-then-borrow bundle is checked as a whole. Returns per-call status, gas, revert reason and asset transfers. Feed it the calls from a plan tool.","inputSchema":{"type":"object","required":["chainId","from","calls"],"properties":{"from":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"calls":{"type":"array","items":{"type":"object","required":["to"],"properties":{"to":{"type":"string"},"data":{"type":"string"},"value":{"type":"string"}}}},"chainId":{"type":"number"}}},"logicalName":"simulateBundle","displayName":"simulateBundle","title":"simulateBundle","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Lotus-Protocol-DeFi-Yields-You-Can-Underwrite&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3AubG90dXNsYWJzLm5ldC9tY3AifQ%3D%3D"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Lotus-Protocol-DeFi-Yields-You-Can-Underwrite%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.lotuslabs.net%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Lotus-Protocol-DeFi-Yields-You-Can-Underwrite%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.lotuslabs.net%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Lotus+Protocol+%7C+DeFi+Yields+You+Can+Underwrite&connectorUrl=https%3A%2F%2Fmcp.lotuslabs.net%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Lotus-Protocol-DeFi-Yields-You-Can-Underwrite\" --url \"https://mcp.lotuslabs.net/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/lotuslabs-mcp-a8bf8356aa","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/lotuslabs-mcp-a8bf8356aa/tools/{tool}","mcpServerUrl":"https://mcp.lotuslabs.net/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/lotuslabs-mcp-a8bf8356aa?live=1"}