# Quiver Risk Brain (remote · quiver-production-c3a8.up.railway.app)

Verifiable, deterministic risk math for autonomous agents; re-runnable proof on every answer.

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

## Components

- remote · `quiver-production-c3a8.up.railway.app`: 71/100 (this document), [markdown](https://verifymcp.io/servers/tristan-tech-ai-quiver-risk-brain/quiver-production-c3a8.md), [page](https://verifymcp.io/servers/tristan-tech-ai-quiver-risk-brain/quiver-production-c3a8)

## Channel facts

- Endpoint: `https://quiver-production-c3a8.up.railway.app/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.1.0`

## 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**: 74/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **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 2340 tokens (~260/item across 9 items; 9 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.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **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 tristan-tech-ai-quiver-risk-brain https://quiver-production-c3a8.up.railway.app/mcp
```

### Codex

```toml
[mcp_servers.tristan-tech-ai-quiver-risk-brain]
url = "https://quiver-production-c3a8.up.railway.app/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "tristan-tech-ai-quiver-risk-brain": {
      "type": "remote",
      "url": "https://quiver-production-c3a8.up.railway.app/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add tristan-tech-ai-quiver-risk-brain --url https://quiver-production-c3a8.up.railway.app/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  tristan-tech-ai-quiver-risk-brain:
    url: "https://quiver-production-c3a8.up.railway.app/mcp"
```

### Other

```json
{
  "mcpServers": {
    "tristan-tech-ai-quiver-risk-brain": {
      "type": "http",
      "url": "https://quiver-production-c3a8.up.railway.app/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-03 (score 71, +1)

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

### 2026-08-01 (score 70, +1)

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

### 2026-07-31 (score 69, +3)

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

### 2026-07-30 (score 66, 0)

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

### 2026-07-29 (score 66, +1)

- [cosmetic] “perp_gate” reworded the description of “side”
- [cosmetic] “perp_gate” reworded the description of “venue”

### 2026-07-28 (score 65, +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 64, 0)

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

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

First indexed and scored.

## MCP tools (9)

### `perp_gate` (~427 tokens)

Perp Liquidation Gate

Deterministic perpetual-futures risk. Given a position (entry, size, margin/leverage, maint-margin/maxLeverage), returns the exact liquidation price, the % adverse move to liquidation, effective leverage, and (if a funding rate is given) the funding drag. Pass a Hyperliquid `symbol` (e.g. BTC) to auto-fill live mark price, funding, and max leverage. Includes a self-check proving the liquidation invariant. Call this BEFORE opening or sizing any leveraged perp position — an agent that knows its true liquidation distance does not get surprise-liquidated.

Input parameters:

- `entryPrice` (number): defaults to live mark if a symbol is given
- `fundingRateHourly` (number): hourly funding rate (Hyperliquid funds hourly)
- `horizonHours` (number): horizon for the funding-drag estimate, in hours
- `leverage` (number): position leverage (alternative to margin)
- `maintMarginRate` (number): e.g. 0.0125; or pass maxLeverage (mmr = 0.5/maxLeverage)
- `margin` (number): isolated margin posted (or pass leverage)
- `markPrice` (number): current mark; distance-to-liq measured from here
- `maxLeverage` (number): venue max leverage for the asset
- `notional` (number): position notional in quote/USD
- `side` (string): long | short (buy | sell are accepted synonyms, as is -1 for short); default long
- `size` (number): position size in base units (or pass notional)
- `symbol` (string): perp symbol (e.g. BTC) — auto-fills live markPrice, fundingRateHourly, and the margin source (Hyperliquid notional tiers or dYdX maintenance rate); also defaults entryPrice to the live mark
- `venue` (string): live-data venue (default hyperliquid). The maths is venue-agnostic — for any other venue omit this and pass maxLeverage/markPrice/fundingRateHourly yourself.

Output parameters:

- `checks` (array): Ground-truth self-checks; the result is untrustworthy if any fails.
- `effectiveLeverage`: notional / margin actually run
- `funding`: funding drag over the horizon (when a funding rate is given)
- `initialMarginRatePct`: initial margin rate applied (%)
- `liquidationPrice`: exact price at which the position liquidates
- `maintenanceMarginRatePct`: maintenance margin rate applied (%)
- `marginTier`: venue margin tier the notional falls into
- `model`: model assumptions used
- `moveToLiquidationPct`: adverse % move (from mark) that triggers liquidation
- `ok` (boolean): false when the engine rejected the input
- `proof` (object): Verifiability envelope: echoed inputs, engine codeHash, contentHash of this exact result, self-checks, EIP-712 signature (EAS-ready). Re-run the open engine on `inputs` to reproduce the result byte-f…

### `portfolio_gate` (~382 tokens)

Cross-Venue Portfolio Gate

Cross-venue portfolio risk. Given positions across venues [{venue, asset|symbol, side, size, entryPrice, margin|leverage, maxLeverage|marginTiers}] — OR just account: a Hyperliquid 0x address, whose FULL live book (positions, margins, account equity, the venue's own liquidation prices) is pulled keylessly — returns TRUE net exposure per underlying, the leg that liquidates FIRST (the binding constraint), concentration (HHI / effective independent bets), and a correlated-crash stress counting how many legs liquidate SIMULTANEOUSLY when the market moves ±X% (correlation→1, the Oct-10-2025 crash regime). Pass Hyperliquid symbols to auto-fill live mark/leverage/margin-tiers. Self-checked (exposure reconciliation, per-leg liquidation invariant, nearest=min, monotone stress, venue-liquidation cross-check). Call to see whether independently-sized bets are secretly ONE bet that blows up together.

Input parameters:

- `account` (string): OR: a Hyperliquid account address (0x…) — the full live book (positions, margins, equity, venue liquidation prices) is pulled keylessly; explicit positions take precedence.
- `betaTier` (string): beta regime for the factor stress: mild | moderate | severe — cross-event validated tiers (pre-registered). Default = worst-case single-event table; explicit betas override.
- `positions` (array): legs: {venue, asset|symbol, side long|short, size, entryPrice, markPrice?, margin|leverage, maxLeverage|maintMarginRate|marginTiers}. A Hyperliquid symbol auto-fills live mark/leverage/tiers.
- `shockScenariosPct` (array): correlated market moves (%) to stress; default [5,10,20,30]

Output parameters:

- `checks` (array): Ground-truth self-checks; the result is untrustworthy if any fails.
- `concentration`: HHI + effective number of independent bets
- `correlatedShockStress`: per-scenario: how many legs liquidate simultaneously at a correlated ±X% move
- `model`: model assumptions used
- `nearestLiquidation`: the leg that liquidates FIRST — the binding constraint
- `netExposureByAsset`: TRUE net exposure per underlying (longs netted against shorts)
- `ok` (boolean): false when the engine rejected the input
- `positions`: per-leg breakdown with each liquidation price
- `positionsCount`: number of legs analyzed
- `proof` (object): Verifiability envelope: echoed inputs, engine codeHash, contentHash of this exact result, self-checks, EIP-712 signature (EAS-ready). Re-run the open engine on `inputs` to reproduce the result byte-f…
- `totalGrossNotional`: sum of |notional| across legs
- `totalNetNotional`: net notional after long/short netting

### `size_gate` (~211 tokens)

Kelly Size Gate

Deterministic position sizing (fractional Kelly) + risk-of-ruin. Given an edge — discrete {winProb, winLossRatio} or continuous {expectedReturn, volatility} — and a bankroll, returns the fractional-Kelly size and the probability of ever drawing down to 50/75/90%. The direct antidote to over-betting: full Kelly rides thin edges to ruin; this defaults to quarter-Kelly. Call before sizing ANY position.

Input parameters:

- `bankroll` (number): bankroll in account units — recommended sizes are returned in the same units
- `expectedReturn` (number): continuous mode: excess return per period (mu)
- `kellyFraction` (number): fraction of full Kelly to bet (default 0.25)
- `volatility` (number): continuous mode: volatility per period (sigma)
- `winLossRatio` (number): discrete mode: net win/loss odds b
- `winProb` (number): discrete mode: win probability in (0,1)

Output parameters:

- `checks` (array): Ground-truth self-checks; the result is untrustworthy if any fails.
- `expectedLogGrowth`: expected log-growth rate at the recommended size
- `fullKellyFraction`: full-Kelly fraction of bankroll (the ruinous ceiling, not the recommendation)
- `hasEdge`: false when the edge is non-positive (bet nothing)
- `impliedPortfolioVolPct`: portfolio volatility implied by the recommended size (%)
- `kellyFractionUsed`: fraction of full Kelly applied (default 0.25)
- `leverage`: implied leverage of the recommended size
- `mode`: discrete or continuous
- `model`: model assumptions used
- `note`: plain-language guidance
- `ok` (boolean): false when the engine rejected the input
- `proof` (object): Verifiability envelope: echoed inputs, engine codeHash, contentHash of this exact result, self-checks, EIP-712 signature (EAS-ready). Re-run the open engine on `inputs` to reproduce the result byte-f…
- `recommendedBetFraction`: recommended bet as a fraction of bankroll
- `recommendedSize`: recommended bet size in bankroll units
- `riskOfRuin`: probability of ever drawing down to 50/75/90% of bankroll

### `exec_verify` (~238 tokens)

Execution-Quality Verifier

Deterministic execution-quality / fair-fill verification. Given a completed swap (amountIn, amountOutRealized) plus either the pre-trade pool reserves+fee (constant-product) or a fair reference price, returns how many basis points the fill lost to ADVERSE execution (sandwich/MEV/stale) beyond the unavoidable fee + own price impact. Proves that a fill "within slippage tolerance" can still have been robbed. Call after a swap to detect being sandwiched.

Input parameters:

- `amountIn` (number, required): input amount actually sent
- `amountOutRealized` (number, required): output amount actually received
- `fairPrice` (number): reference mode: fair out-per-in price at submit time
- `feeTier` (number): pool fee as fraction, e.g. 0.003
- `reserveIn` (number): pool reserve of input token, pre-trade (constant-product mode)
- `reserveOut` (number): pool reserve of output token, pre-trade
- `slippageTolerancePct` (number): the slippage setting used, to demonstrate within-tolerance-yet-robbed

Output parameters:

- `adverseExecutionBps`: bps lost to ADVERSE execution beyond the honest cost
- `adverseValueOut`: value lost to adverse execution, in output-token units
- `checks` (array): Ground-truth self-checks; the result is untrustworthy if any fails.
- `honestFillPrice`: the fill price an honest execution would have produced
- `honestOut`: output an honest execution would have delivered
- `midPrice`: pre-trade mid price
- `mode`: constant-product or reference-price mode
- `note`: interpretation guidance
- `ok` (boolean): false when the engine rejected the input
- `proof` (object): Verifiability envelope: echoed inputs, engine codeHash, contentHash of this exact result, self-checks, EIP-712 signature (EAS-ready). Re-run the open engine on `inputs` to reproduce the result byte-f…
- `realizedFillPrice`: the fill price actually received
- `unavoidableCostBps`: fee + own price impact — the honest, unavoidable cost (bps)
- `verdict`: plain-language verdict

### `options_risk` (~215 tokens)

Options Book Risk (Greeks + SPAN)

Portfolio greeks (delta/gamma/vega/theta/vanna/volga) + SPAN-style scenario margin for an options book on Black-76. Given a list of legs {type, strike, expiryDays, iv, quantity(signed)} and a forward, returns aggregate greeks, first-order P&L per underlying move, and the worst-case loss over a price×vol grid. Self-checked: analytic greeks are verified against finite-difference derivatives of the repriced book. Call to size an options book's true net risk and margin — not the sum of per-leg notionals.

Input parameters:

- `forward` (number): shared forward price (or set per position)
- `positions` (array, required): option legs of the book
- `r` (number): discount rate, default 0
- `scanRangePct` (number): SPAN price scan range, default 0.15
- `volShiftVolPts` (number): SPAN vol shift in vol-points, default 10

Output parameters:

- `checks` (array): Ground-truth self-checks; the result is untrustworthy if any fails.
- `greeks`: aggregate delta/gamma/vega/theta/vanna/volga — each verified vs finite differences
- `model`: Black-76 assumptions used
- `ok` (boolean): false when the engine rejected the input
- `pnlPerUnderlyingPctMove`: first-order P&L per % move of the underlying
- `portfolioValue`: mark-to-model value of the book
- `positions`: per-leg pricing breakdown
- `positionsCount`: number of legs priced
- `proof` (object): Verifiability envelope: echoed inputs, engine codeHash, contentHash of this exact result, self-checks, EIP-712 signature (EAS-ready). Re-run the open engine on `inputs` to reproduce the result byte-f…
- `spanMargin`: worst-case loss over the price×vol scenario grid (SPAN-style margin)

### `lp_risk` (~229 tokens)

LP Divergence-Loss Gate

Forward-looking liquidity-provision risk. Given a realized price ratio (for impermanent loss) and/or a volatility + horizon (for expected divergence / LVR), returns the closed-form IL, the expected −σ²T/8 divergence, and — with a fee APR — the net forecast and breakeven volatility (the vol above which fees no longer cover the bleed). Self-checked: the IL closed form is verified at the token level against explicit constant-product amounts. Call before providing liquidity to see whether the fee yield can plausibly beat the divergence loss.

Input parameters:

- `capitalUsd` (number): position capital in USD — losses are also reported in USD
- `concentrationFactor` (number): V3 amplifier ≥1 (default 1)
- `feeAprPct` (number): annualized fee yield estimate
- `horizonPeriods` (number): periods (default 1)
- `periodsPerYear` (number): default 365
- `priceRatio` (number): realized P1/P0 for realized IL
- `volatility` (number): per-period vol (decimal) for expected divergence

Output parameters:

- `checks` (array): Ground-truth self-checks; the result is untrustworthy if any fails.
- `concentrationFactor`: V3 concentration amplifier applied
- `expectedDivergence`: expected divergence loss / LVR over the horizon (−σ²T/8 law)
- `feeVsDivergence`: net forecast and breakeven volatility vs the fee APR
- `model`: model assumptions used
- `ok` (boolean): false when the engine rejected the input
- `proof` (object): Verifiability envelope: echoed inputs, engine codeHash, contentHash of this exact result, self-checks, EIP-712 signature (EAS-ready). Re-run the open engine on `inputs` to reproduce the result byte-f…
- `realizedIL`: closed-form impermanent loss at the realized price ratio

### `treasury_risk` (~200 tokens)

Treasury Depeg & Concentration

Stablecoin / on-chain treasury risk. Given a book of positions [{asset, amountUsd, apyPct, venue, chain, pegTarget, depegProbAnnual}], returns concentration (Herfindahl by asset/venue/chain + breaches over a limit), depeg stress (explicit scenarios + a worst-single-depeg scan), weighted and risk-adjusted yield. Self-checked: HHI == Σw², weights sum to 1, depeg-loss identity. Call to size a treasury's real risk — issuer/venue/chain concentration and depeg exposure — not just its headline APY.

Input parameters:

- `concentrationLimitPct` (number): flag any single exposure above this (default 25)
- `depegFloor` (number): worst-single-depeg stress floor (default 0.90)
- `depegScenarios` (array): [{asset, price}] explicit depeg stresses
- `positions` (array, required): treasury holdings

Output parameters:

- `checks` (array): Ground-truth self-checks; the result is untrustworthy if any fails.
- `concentration`: Herfindahl (HHI) by asset/venue/chain + limit breaches
- `depegStress`: explicit depeg scenarios + worst-single-depeg scan
- `expectedAnnualDepegLossUsd`: expected annual loss from depeg probabilities (USD)
- `model`: model assumptions used
- `ok` (boolean): false when the engine rejected the input
- `proof` (object): Verifiability envelope: echoed inputs, engine codeHash, contentHash of this exact result, self-checks, EIP-712 signature (EAS-ready). Re-run the open engine on `inputs` to reproduce the result byte-f…
- `riskAdjustedApyPct`: yield after expected depeg loss (%)
- `totalUsd`: total treasury size in USD
- `verdict`: plain-language verdict
- `weightedApyPct`: holdings-weighted headline APY (%)

### `risk_attest` (~132 tokens)

Merkle Batch Attestation

Batch the content-hashes from many Quiver proof envelopes into ONE Merkle root plus per-item inclusion proofs, so a single on-chain anchor (your wallet's tx) attests all of them at once. Self-checked for completeness (every item verifies) and soundness (a non-member does not). Use to make a batch of risk computations cheaply and permanently attestable for audit/liability, without a chain write per computation.

Input parameters:

- `contentHashes` (array): alternatively, raw content-hashes
- `items` (array): proof envelopes (uses proof.contentHash) or raw content-hashes (hex)

Output parameters:

- `algorithm`: hash/tree construction used
- `anchor`: EIP-712 (EAS-ready) attestation payload for the single on-chain anchor
- `attestations`: per-item inclusion proofs
- `checks` (array): Ground-truth self-checks; the result is untrustworthy if any fails.
- `duplicateLeaves`: duplicate content-hashes detected in the batch
- `leafCount`: number of items batched
- `merkleRoot`: the single root that attests every item
- `ok` (boolean): false when the engine rejected the input
- `proof` (object): Verifiability envelope: echoed inputs, engine codeHash, contentHash of this exact result, self-checks, EIP-712 signature (EAS-ready). Re-run the open engine on `inputs` to reproduce the result byte-f…
- `verify`: how to verify inclusion against the root

### `event_vol` (~306 tokens)

Event Implied-Move

Options-implied expected move around a scheduled event (FOMC/CPI/earnings/etc.). Given spot, ATM implied vol, and days-to-event, returns the 1σ move, the straddle-implied expected ABSOLUTE move (risk-neutral E|ΔS|), and the probability of exceeding move thresholds. Given the vol term structure across the event (ATM IV of the expiry before vs after), it ISOLATES the event's own priced-in move (the Wright event-day technique). Self-checked: the straddle equals a numerical integral of |S_T−S₀|. This is the magnitude that macro calendars (which give only date + impact label) leave out.

Input parameters:

- `T` (number): years (or daysToEvent)
- `atmIv` (number): ATM IV as a decimal (alternative to atmIvPct)
- `atmIvPct` (number): ATM IV in % (or atmIv decimal)
- `daysAfter` (number): days to the after-event expiry
- `daysBefore` (number): days to the before-event expiry
- `daysToEvent` (number): days until the event
- `ivAfterPct` (number): ATM IV (%) of the expiry just AFTER the event
- `ivBeforePct` (number): ATM IV (%) of the expiry just BEFORE the event
- `spot` (number, required): current spot price
- `thresholdsPct` (array): move thresholds (%) for probability-of-exceeding

Output parameters:

- `atmIvPct`: ATM IV used (%)
- `checks` (array): Ground-truth self-checks; the result is untrustworthy if any fails.
- `eventIsolation`: the event's own priced-in move, isolated from the term structure (when before/after IVs are given)
- `expectedMove`: 1σ move + straddle-implied expected |ΔS| (risk-neutral)
- `horizonDays`: horizon in days
- `method`: technique + assumptions used
- `ok` (boolean): false when the engine rejected the input
- `probabilityMoveBeyond`: probability of exceeding each move threshold
- `proof` (object): Verifiability envelope: echoed inputs, engine codeHash, contentHash of this exact result, self-checks, EIP-712 signature (EAS-ready). Re-run the open engine on `inputs` to reproduce the result byte-f…
- `spot`: spot the computation is anchored on

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/tristan-tech-ai-quiver-risk-brain/quiver-production-c3a8#diagnostics

## Score history

- 2026-08-03: 71
- 2026-08-02: 70
- 2026-08-01: 70
- 2026-07-31: 69
- 2026-07-30: 66
- 2026-07-29: 66
- 2026-07-28: 65
- 2026-07-27: 64
- 2026-07-26: 64

## Links

- Remote endpoint: https://quiver-production-c3a8.up.railway.app/mcp
- Changelog RSS feed: https://verifymcp.io/servers/tristan-tech-ai-quiver-risk-brain/quiver-production-c3a8/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/tristan-tech-ai-quiver-risk-brain/quiver-production-c3a8/changelog.json
- HTML version of this page: https://verifymcp.io/servers/tristan-tech-ai-quiver-risk-brain/quiver-production-c3a8
