Skip to content

xyz.spiralstake/leverage

by spiralstake.xyz · remote · no sign-in to list tools · v0.1.1 · published by xyz.spiralstake

Leveraged-yield router on Morpho. List strategies, simulate, and build UNSIGNED txs.

Changes · 4

10 tools: 4 change things and 6 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http leverage https://api.spiralstake.xyz/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

10 tools

Changes things 4Claude Code: ask
  • build_equity_deposit_txBuild the UNSIGNED call batch to deposit into a stock + yield equity vault, for the given wallet to sign.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Build the UNSIGNED call batch to deposit into a stock + yield equity vault, for the given wallet to sign. Non-custodial. Returns `calls[]` (approve USDG → router, authorize the router on Morpho, the one-call equityEntry, revoke) to submit as ONE atomic batch (EIP-5792 wallet_sendCalls / Safe), plus the same preview as simulate_equity_deposit. meta.signingUrl is a one-click link for a human to sign in the app. Swap calldata is time-sensitive (meta.expiresAt).

    Annotations the server declares

    • title: Build Equity Vault Deposit
    • readOnlyHint: false
    • destructiveHint: false
  • build_equity_exit_txBuild the UNSIGNED call batch to fully unwind an OPEN equity vault (from get_positions.equityPositions): close each of its yield loops, then one self-funded router call repays the …No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Build the UNSIGNED call batch to fully unwind an OPEN equity vault (from get_positions.equityPositions): close each of its yield loops, then one self-funded router call repays the stock debt, withdraws the stock, swaps it to USDG and returns the proceeds. Submit as ONE atomic batch. Non-custodial; the vault's yield loop cannot be closed alone through build_manage_tx. Only the vault's own loop(s) are closed: those get_positions attributes unambiguously, or exactly the ones you pass in yieldPositionIds. Always read meta.closedYieldPositionIds.

    Annotations the server declares

    • title: Build Equity Vault Exit
    • readOnlyHint: false
    • destructiveHint: false
  • build_leverage_txBuild the UNSIGNED transaction to open a leveraged position, for the given wallet to sign.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Build the UNSIGNED transaction to open a leveraged position, for the given wallet to sign. Non-custodial: this server never signs, sends, or holds keys. The canonical output is the executable { approvals[], tx{to,data,value} } — sign and broadcast it directly (approvals first), plus the same position preview as simulate_leverage. meta.signingUrl is an optional one-click link for a human to sign in their own wallet. The embedded swap calldata is time-sensitive (see meta.expiresAt) — rebuild if stale.

    Annotations the server declares

    • title: Build Leverage Transaction
    • readOnlyHint: false
    • destructiveHint: false
  • build_manage_txBuild the UNSIGNED transaction to adjust or close an OPEN position, for the given wallet to sign.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Build the UNSIGNED transaction to adjust or close an OPEN position, for the given wallet to sign. Non-custodial (never signs/holds keys). Canonical output is the executable { approvals[], tx{to,data,value} } (sign/broadcast directly); meta.signingUrl is an optional link for a human to sign in their own wallet. Actions: 'close' (unwind fully), 'increase_leverage' (borrow to a higher LTV), 'add_collateral' (top up — pay in collateral or any token), 'remove_collateral' (withdraw), 'repay' (pay down debt; set full=true to clear it), 'borrow' (draw more loan token). Get the position `id` from get_positions. Swap calldata (close/increase/zap paths) is time-sensitive — see meta.expiresAt.

    Annotations the server declares

    • title: Build Manage Transaction
    • readOnlyHint: false
    • destructiveHint: false
Only reads 6Claude Code: allow
  • get_positionsRead a wallet's open/closed Spiral leverage positions from chain state (read-only).No findings

    Why it is in this group

    • The name "get_positions" says "get": a word for reading.
    Description, as the server wrote it
    Read a wallet's open/closed Spiral leverage positions from chain state (read-only). For each: collateral/loan, leveraged collateral, net equity, debt, current LTV vs liquidation LTV (with headroom), current leverage, net USD value, and current leveraged APY. No cost-basis / realized P&L (those need off-chain history). Newest first. `equityPositions` lists the wallet's open equity vaults (stock leg + the yield loop(s) it funds); those loops are excluded from `positions`.

    Annotations the server declares

    • title: Get Positions
    • readOnlyHint: true
  • get_pricesCurrent USD prices of every loan and collateral token the chain's strategies use (token address -> USD), including equity-vault stocks.No findings

    Why it is in this group

    • The name "get_prices" says "get": a word for reading.
    Description, as the server wrote it
    Current USD prices of every loan and collateral token the chain's strategies use (token address -> USD), including equity-vault stocks. Loan tokens are priced from CoinGecko; collateral from the market oracle × its loan token's price — the same figures the strategies' priceUsd fields carry.

    Annotations the server declares

    • title: Get Prices
    • readOnlyHint: true
  • get_strategyGet one eligible strategy's full raw facts by its Morpho market id.No findings

    Why it is in this group

    • The name "get_strategy" says "get": a word for reading.
    Description, as the server wrote it
    Get one eligible strategy's full raw facts by its Morpho market id.

    Annotations the server declares

    • title: Get Strategy
    • readOnlyHint: true
  • list_strategiesList eligible Spiral strategies on a chain with raw risk facts (collateral/borrow APY, leverage ladder, oracle type, exit liquidity, LTVs, curator).No findings

    Why it is in this group

    • The name "list_strategies" says "list": a word for reading.
    Description, as the server wrote it
    List eligible Spiral strategies on a chain with raw risk facts (collateral/borrow APY, leverage ladder, oracle type, exit liquidity, LTVs, curator). Mainnet (1): correlated yield loops on stables, ETH, BTC and Pendle PTs. Robinhood Chain (4663): stable loops on USDG, directional perps (spiralHints.profile 'leveraged_perp' — APYs are financing carry only) and stock + yield equity vaults (profile 'equity_yield_vault', ids start with 'equity-'). Optionally filter by collateral category.

    Annotations the server declares

    • title: List Strategies
    • readOnlyHint: true
  • simulate_equity_depositPreview depositing USDG into a stock + yield equity vault — deterministic, read-only, no wallet.No findings

    Why it is in this group

    • The description's first verb is "preview": a word for reading.
    Description, as the server wrote it
    Preview depositing USDG into a stock + yield equity vault — deterministic, read-only, no wallet. You end up 1x long the stock (held as your own Morpho collateral), with `stockLtvPct` of its value borrowed as USDG and flash-looped into the vault's yield strategy. Returns the stock received, the borrow, the stock liquidation price and headroom, the yield leg's size/leverage/APY, the net APY at that LTV, fees and price impact per leg.

    Annotations the server declares

    • title: Simulate Equity Vault Deposit
    • readOnlyHint: true
  • simulate_leveragePreview opening a leveraged position — deterministic, read-only, no wallet needed.No findings

    Why it is in this group

    • The description's first verb is "preview": a word for reading.
    Description, as the server wrote it
    Preview opening a leveraged position — deterministic, read-only, no wallet needed. Returns the resulting leverage, effective LTV, leveraged collateral, expected leveraged APY, price impact, the auto-selected execution path, flash-loan size, and (if the flash loan exceeds direct market liquidity) the public-allocator reallocation fee. Numbers move with market prices.

    Annotations the server declares

    • title: Simulate Leverage
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.1.1. Values in angle brackets are yours to fill in.

claude mcp add --transport http leverage https://api.spiralstake.xyz/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__leverage__list_strategies",
      "mcp__leverage__get_strategy",
      "mcp__leverage__get_prices",
      "mcp__leverage__simulate_leverage",
      "mcp__leverage__get_positions",
      "mcp__leverage__simulate_equity_deposit"
    ],
    "ask": [
      "mcp__leverage__build_leverage_tx",
      "mcp__leverage__build_manage_tx",
      "mcp__leverage__build_equity_deposit_tx",
      "mcp__leverage__build_equity_exit_tx"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as leverage. Review it before you use it.