morpho-cli について
morpho-cli は、Morpho プロトコルのデータ照会と未署名トランザクションの準備を行う実験的なコマンドラインスキルです。複数の EVM チェーンに対応し、シミュレーションと安全上の指針を提供します。署名やブロードキャストは行いません。
主な機能
- 01ボールト、マーケット、ポジション、残高の照会
- 02ボールトとマーケットの未署名トランザクション準備
- 03準備した操作のシミュレーション
- 04警告付きの構造化 JSON 出力
活用シーン
- 01ボールトの利回りと市場状況の確認
- 02署名前の操作内容の確認
- 03借入の健全性と出金流動性の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ morpho-org/ morpho-skills --skill morpho-cliインストール後、Claude Code で/morpho-cliを入力して読み込まれたか確認します。
同梱ファイルreferences/read.mdreferences/write.md
詳細
morpho-cli
実験的(v1.0 未満) — コマンド構文、レスポンススキーマ、利用可能な操作は変更される場合があります。重要な出力は必ず個別に検証してください。
Morpho プロトコルのデータを照会し、署名されていないトランザクションを作成します。すべてのコマンドは JSON を標準出力に出力します。秘密鍵は不要です。
npx @morpho-org/cli@latest <command> [options]
対応チェーン:ethereum、base、arbitrum、optimism、polygon、unichain、worldchain、katana、hyperevm、monad、stable。すべてのコマンドで --chain が必要です。
レスポンススキーマ
- 読み取りコマンド — すべての読み取りツールの正確な JSON 形式。すべてのレスポンスに適用される読み取り時の規則も含まれます
- 書き込みコマンド —
PreparedOperationの形式、outcomeのサブスキーマ、および各 prepare-* ツールの入力形式
クイックリファレンス
# Read — query protocol state
npx @morpho-org/cli@latest query-vaults --chain base [--asset-symbol USDC] [--asset-address 0x...] [--sort apy_desc|apy_asc|tvl_desc|tvl_asc] [--limit 5] [--skip 0] [--fields address,name,symbol,apyPct,tvl,tvlUsd,feePct]
npx @morpho-org/cli@latest get-vault --chain base --address 0x...
npx @morpho-org/cli@latest query-markets --chain base [--loan-asset 0x...] [--collateral-asset 0x...] [--sort-by supplyApy|borrowApy|netSupplyApy|netBorrowApy|supplyAssetsUsd|borrowAssetsUsd|totalLiquidityUsd] [--sort-direction asc|desc] [--limit 10] [--skip 0] [--fields supplyApy,borrowApy,totalSupply,totalBorrow,totalCollateral,totalLiquidity,supplyAssetsUsd,borrowAssetsUsd,collateralAssetsUsd,liquidityAssetsUsd]
npx @morpho-org/cli@latest get-market --chain base --id 0x...
npx @morpho-org/cli@latest get-positions --chain base --user-address 0x...
npx @morpho-org/cli@latest get-token-balance --chain base --user-address 0x... --token-address 0x...
# Write — prepare unsigned transactions (simulation runs automatically via @morpho-org/evm-simulation)
npx @morpho-org/cli@latest prepare-deposit --chain base --vault-address 0x... --user-address 0x... --amount 1000
npx @morpho-org/cli@latest prepare-withdraw --chain base --vault-address 0x... --user-address 0x... --amount max
npx @morpho-org/cli@latest prepare-supply --chain base --market-id 0x... --user-address 0x... --amount 5000
npx @morpho-org/cli@latest prepare-borrow --chain base --market-id 0x... --user-address 0x... --borrow-amount 1
npx @morpho-org/cli@latest prepare-repay --chain base --market-id 0x... --user-address 0x... --amount max
npx @morpho-org/cli@latest prepare-supply-collateral --chain base --market-id 0x... --user-address 0x... --amount 5000
npx @morpho-org/cli@latest prepare-withdraw-collateral --chain base --market-id 0x... --user-address 0x... --amount max
# Utility
npx @morpho-org/cli@latest health-check
npx @morpho-org/cli@latest get-supported-chains
書き込みワークフロー:準備 → 提示
すべての書き込み操作は 2 つのステップで行います。シミュレーションは prepare-* 内で自動的に実行されます。
- 準備 —
prepare-*コマンドを実行します。CLI がトークンの小数桁数、許可、承認、シミュレーションを自動的に処理します。transactions、summary、warnings、outcome(実行後の状態プレビュー)、および任意のsimulationブロックを含むPreparedOperationが返されます。 - シミュレーションを検証: レスポンスの任意の
simulation.transfersには、EVM シミュレーションで確認された実際の送金が一覧表示されます。Tenderly が設定され(TENDERLY_*環境変数が設定された MCP パス)、正常に実行された場合は、simulation.assetChanges[]も含まれます。各エントリには{ type, from, to, amount, rawAmount, dollarValue, tokenInfo: { address, symbol, decimals, name } }が格納されます。よりわかりやすい要約には、(存在する場合)assetChangesを使用してください。transfersはエージェント側で確認する際の正規の情報源です。simulationがなく、errorレベルの警告(SIMULATION_REVERTED、BUNDLER_RETAINS_FUNDS、SANCTIONED_ADDRESS)がある場合、そのバンドルは問題があると判明しています。署名用にトランザクションを提示しないでください。 - 提示 — 要約、署名されていないトランザクションの一覧、outcome、および警告(ヘルスファクターの低下、流動性不足)を表形式で提示します。
シミュレーションはすべての prepare-* 呼び出しの一部としてインラインで実行されます。個別のシミュレーションコマンドはありません。
| 操作 | outcome の形式 | 表示すべき主なフィールド |
|---|---|---|
deposit、withdraw(ボールト) | outcome.vault | sharesReceived、assetsReceived、positionAssets、positionShares |
supply、borrow、repay、supply_collateral、withdraw_collateral(マーケット) | outcome.market | healthFactor、isHealthy、maxBorrowable、utilizationBeforePct → utilizationAfterPct、borrowApyBeforePct → borrowApyAfterPct、および操作後の supplied / borrowed / collateral(生の整数文字列 — 10^decimals で割ります) |
シミュレーションの失敗
| リバート | 原因 | 対処方法 |
|---|---|---|
ERC20: insufficient allowance | 承認が不足しています | 再準備してください。CLI が自動的に承認を含めるはずです |
ERC4626ExceededMaxWithdraw | ボールトの流動性が不足しています | 金額を減らしてください(下記参照) |
insufficient balance | ユーザーのトークン残高が不足しています | ユーザーに伝えてください |
| カスタムエラーの 16 進数値 | プロトコル固有です | get-market または get-vault で状態を照会して原因を調べてください |
一部引き出し
prepare-withdraw --amount max で残高全額を引き出せない場合、CLI は warnings[] で流動性不足を示す PreparedOperation を返します。応答は引き続き有効で、現時点で引き出し可能な最大額を表しています。
- 警告をそのままユーザーに伝えてください。より少ない額での引き出しを黙って受け入れてはいけません。
- 次の2つの選択肢を提示してください。
- CLI が準備した一部の額を受け入れる(具体的な額は
outcome.vault.assetsReceivedを確認してください。必要に応じて、準備から実行までに利息が発生することへの安全余裕として、その額のおよそ99%を使って--amount <value>を指定し、prepare-withdrawを再実行してください)。 - 流動性が増えるまで待つ。ロック中の資産は、原資産市場の借り手が返済するか、キュレーターが再配分するとロックが解除されます。
- CLI が準備した一部の額を受け入れる(具体的な額は
summary文字列を解析して、額を決して推測しないでください。これは人間向けの文であり、機械可読なフィールドではありません。
安全ルール
- 提示する前にシミュレーションを確認する — 応答に
simulation.transfersがあるか確認してください。これがなく、warningsにerrorレベルの項目が含まれている場合は、提示する前に処理を停止して原因を調査してください。 - 署名またはブロードキャストを決して行わない — 未署名のペイロードのみ扱ってください。
- 借入時はヘルスファクターに注意する — 1.1未満の場合は警告してください。
- 一部引き出しに伴う流動性の制約を明確に伝える。
CLI エラー
npx @morpho-org/cli@latest コマンドが失敗した場合は、処理を停止してエラーをユーザーに報告してください。次のことは行わないでください。
- 自分で考えた別のパラメーターで再試行する
- 代替ツールや API に切り替える
- 必須オプションの不足を回避しようとする
jqやその他のフィルターに出力をパイプする — 応答の整形には、CLI 組み込みのフラグ(--fields、--sort-by、--limitなど)を使用する
よくある間違い
--chainを指定し忘れる — すべてのコマンドで指定が必要で、デフォルト値はありません- チェーン名(
ethereum、base)ではなく、チェーン ID(1、8453)を使う TokenAmount.valueを10^decimalsで割る —TokenAmountの値にはすでに小数点が適用されています(USDC の値が"1000"の場合、1,000マイクロUSDCではなく1,000ドルです)。*Pctフィールドはすでにパーセントに換算されており、*Usdフィールドはすでにドル単位です。生の整数文字列が含まれるのはoutcome.market.{supplied,borrowed,collateral}とoutcome.vault.{sharesReceived,assetsReceived,positionShares}のみで、表示するには/10^decimalsが必要です。- 小数点以下の桁数を18と決めつける — USDC/USDT は6桁、WBTC/cbBTC は8桁です。応答メタデータから小数点以下の桁数を読み取り、決して推測しないでください。
--amountに生の単位を渡す — CLI が受け取るのは人間が読める値です(1000000000ではなく1000)。simulationフィールドがなく、errorレベルの警告がある場合に無視する — 提示する前に原因を調査してください。TokenAmount.valueから額を再計算する — 値にはすでに小数点が適用されています。ユーザーにはそのまま提示してください。