# xyz.spiralstake/leverage (remote · api.spiralstake.xyz)

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

- Trust score: 65/100 (medium)
- Change this week: +4
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `api.spiralstake.xyz`: 65/100 (this document), [markdown](https://verifymcp.io/servers/xyz-spiralstake-leverage/api.md), [page](https://verifymcp.io/servers/xyz-spiralstake-leverage/api)

## Channel facts

- Endpoint: `https://api.spiralstake.xyz/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.1.1`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 60/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 5 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC is configured correctly; the domain's records validate against the full chain to the root.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 61/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 1864 tokens (~266/item across 7 items; 7 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

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

### Codex

```toml
[mcp_servers.xyz-spiralstake-leverage]
url = "https://api.spiralstake.xyz/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "xyz-spiralstake-leverage": {
      "type": "remote",
      "url": "https://api.spiralstake.xyz/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add xyz-spiralstake-leverage --url https://api.spiralstake.xyz/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  xyz-spiralstake-leverage:
    url: "https://api.spiralstake.xyz/mcp"
```

### Other

```json
{
  "mcpServers": {
    "xyz-spiralstake-leverage": {
      "type": "http",
      "url": "https://api.spiralstake.xyz/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 65, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 64, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 63, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-28 (score 62, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 61, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 60)

First indexed and scored.

## MCP tools (7)

### `list_strategies` (~104 tokens)

List Strategies

List eligible Spiral leveraged-yield strategies with raw risk facts (collateral/borrow APY, leverage ladder, oracle type, exit-liquidity, LTVs). Optionally filter by collateral category.

Input parameters:

- `category` (string): Filter by collateral category, e.g. 'stable', 'ETH', 'BTC', 'stable-PT'.
- `chainId` (integer): Chain to target. Supported: 1, 4663. Default: 1.

### `get_strategy` (~68 tokens)

Get Strategy

Get one eligible strategy's full raw facts by its Morpho market id.

Input parameters:

- `chainId` (integer): Chain to target. Supported: 1, 4663. Default: 1.
- `id` (string, required): Morpho market id (0x followed by 64 hex chars).

### `get_prices` (~48 tokens)

Get Prices

Current USD prices for loan/collateral tokens (token address -> USD).

Input parameters:

- `chainId` (integer): Chain to target. Supported: 1, 4663. Default: 1.

### `simulate_leverage` (~293 tokens)

Simulate Leverage

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.

Input parameters:

- `amount` (string, required): Amount of payToken in human units (e.g. '10000' for 10,000 USDC).
- `chainId` (integer): Chain to target. Supported: 1, 4663. Default: 1.
- `desiredLtv` (string): Target LTV percent, e.g. '66.67'. Provide this OR leverage.
- `leverage` (number): Target leverage, e.g. 3. Provide this OR desiredLtv.
- `payToken` (string, required): Address of the token you pay in. May be the collateral (opened directly) or any other token (zapped: swapped to collateral first). Native ETH = the zero address 0x0000…0000.
- `slippage` (number): Swap slippage as a ratio (0.005 = 0.5%). Default 0.005, capped at 0.01.
- `strategyId` (string, required): Morpho market id of the strategy (from list_strategies / get_strategy).

### `build_leverage_tx` (~362 tokens)

Build Leverage Transaction

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.

Input parameters:

- `amount` (string, required): Amount of payToken in human units (e.g. '10000' for 10,000 USDC).
- `chainId` (integer): Chain to target. Supported: 1, 4663. Default: 1.
- `desiredLtv` (string): Target LTV percent, e.g. '66.67'. Provide this OR leverage.
- `leverage` (number): Target leverage, e.g. 3. Provide this OR desiredLtv.
- `payToken` (string, required): Address of the token you pay in. May be the collateral (opened directly) or any other token (zapped: swapped to collateral first). Native ETH = the zero address 0x0000…0000.
- `slippage` (number): Swap slippage as a ratio (0.005 = 0.5%). Default 0.005, capped at 0.01.
- `strategyId` (string, required): Morpho market id of the strategy (from list_strategies / get_strategy).
- `userAddress` (string, required): The wallet address that will sign and send. Approvals and onBehalfOf are built for it.

### `get_positions` (~124 tokens)

Get Positions

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.

Input parameters:

- `chainId` (integer): Chain to target. Supported: 1, 4663. Default: 1.
- `userAddress` (string, required): Wallet address to read positions for.

### `build_manage_tx` (~416 tokens)

Build Manage Transaction

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.

Input parameters:

- `action` (string, required): What to do to the position.
- `amount` (string): Human-units amount. Required for add_collateral/remove_collateral/repay/borrow.
- `chainId` (integer): Chain to target. Supported: 1, 4663. Default: 1.
- `desiredLtv` (string): increase_leverage: target LTV percent (e.g. '80'). Provide this OR leverage.
- `full` (boolean): repay only: clear the entire remaining debt.
- `id` (integer, required): On-chain position index, from get_positions (its `id`).
- `leverage` (number): increase_leverage: target leverage. Provide this OR desiredLtv.
- `payToken` (string): Token to pay in (add_collateral/repay). Collateral/loan = direct; any other = zapped. ETH = zero address.
- `slippage` (number): Swap slippage ratio (0.005 = 0.5%). Default 0.005, capped at 0.01.
- `userAddress` (string, required): Wallet that owns the position and will sign.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/xyz-spiralstake-leverage/api#diagnostics

## Score history

- 2026-08-03: 65
- 2026-08-02: 65
- 2026-08-01: 64
- 2026-07-31: 64
- 2026-07-30: 63
- 2026-07-29: 62
- 2026-07-28: 62
- 2026-07-27: 61
- 2026-07-26: 60

## Links

- Remote endpoint: https://api.spiralstake.xyz/mcp
- Repository: https://github.com/spiral-stake/mcp
- Website: https://spiralstake.xyz/
- Changelog RSS feed: https://verifymcp.io/servers/xyz-spiralstake-leverage/api/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/xyz-spiralstake-leverage/api/changelog.json
- HTML version of this page: https://verifymcp.io/servers/xyz-spiralstake-leverage/api
