Moonwell Plugin
[!IMPORTANT] Complete the short Base MCP onboarding flow defined inSKILL.mdbefore calling any Moonwell endpoint. The user’s wallet address — required forprepareand position queries — is fetched lazily when needed.
Overview
Moonwell is a Compound v2 lending protocol on Base and Optimism. The plugin reads positions/rates and prepares unsigned calldata over the Moonwell HTTP API, then executes viasend_calls. No additional MCP server required — everything goes through an HTTP call + send_calls.
Supported chains: Base (8453), Optimism (10).
Surface Routing
Moonwell is HTTP-only; every capability follows the standard HTTP routing in ../references/custom-plugins.md.| Capability | Path |
|---|---|
| Read markets/rates/positions/health | Harness HTTP tool if available, else web_request GET against api.moonwell.fi. |
| Prepare a lend/borrow action | Harness HTTP tool or web_request (GET or POST) → calldata → send_calls. |
Endpoints
Read endpoints (use web_request GET)
positions, health, rewards, token-balance) are never cached.
/positions returns an array — one entry per market. Use ?active=true to filter out markets where both suppliedUsd and borrowedUsd are zero.
Prepare endpoints (use web_request → send_calls)
Verbs:supply, withdraw, borrow, repay.
GET form (query params):
body object parameter to web_request):
Key parameters
| Field | Notes |
|---|---|
chain | base (default), optimism, or chain ID |
asset | Symbol: USDC, WETH, ETH (alias for WETH) |
amountDecimal | Human-readable string, e.g. "100". Use this or amount (base units), never both. |
from | User’s wallet address (from get_wallets) |
Orchestration
transactions[] are ordered — approve and enter-market come before the protocol action. Execute them as a single send_calls batch.
Submission
Target tool:send_calls.
A prepare/<verb> response returns ordered transaction steps:
calls array to send_calls, mapping chainId from any transaction item to the Base MCP chain string (base for Base mainnet, optimism for Optimism). Then walk the approval flow (see ../references/approval-mode.md) and poll get_request_status.
Example Prompts
Supply 100 USDC on Base
Borrow USDC against collateral
Check positions and health
Risks & Warnings
- Liquidation risk. Borrowing against collateral can be liquidated if the position’s health factor falls too low. Always read
/health/<address>before and after a borrow or withdraw, and surface the value to the user.
Health factor guide
| Value | Status |
|---|---|
> 1.5 | Healthy |
1.1 – 1.5 | Caution |
< 1.1 | Liquidation risk |
null | No borrows |
Notes
- mTokens — ERC-20 receipt tokens (mUSDC, mWETH…); exchange rate accrues over time
- WETH special-case — borrow/withdraw deliver native ETH; supply/repay require ERC-20 WETH. Both
asset=ETHandasset=WETHresolve to the same mWETH market - Compound v2 error codes —
mint,borrow,repayreturn non-zero codes for business-logic failures without reverting. Check the onchain receipt after broadcast - Base has two mUSDC entries — the current market and a deprecated bridged-USDC market. Disambiguate by
marketAddressordeprecated: true
Chain IDs from Moonwell
| Chain | Moonwell chainId | Base MCP chain |
|---|---|---|
| Base mainnet | 8453 | base |
| Optimism | 10 | optimism |