# Market Regime (`research_regime`)

> What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call.

- Category: Research & risk
- MCP tool: `research_regime`
- REST: `GET /research/regime`
- x402 price: $0.05 per call (USDC on Base)
- HTML: https://www.f1ow.com/docs/tools/research_regime

## What it does

Deterministic market-regime classification across seven axes: trend (Mayer Multiple bands vs the 200-day SMA), volatility (30d realized, percentile vs own history), cycle (a ~30-indicator top checklist incl. MVRV Z-Score, NUPL, Pi Cycle, AHR999), sentiment (Fear & Greed level, trajectory and percentile), leverage stress (derivatives-risk-index percentile), liquidity (7d spot-ETF net flows vs prior 7d), and rotation (Altcoin Season index, BTC dominance, ETH/BTC 30d). Each axis reports its state, the numbers behind it, and a +1/0/-1 vote; the overall posture is the disclosed sum-of-votes rule, with one exception — while 30d realized volatility sits at or below its 5th percentile the tape is compressed, trend structure stops being tradeable, and the Trend axis's vote is withheld (its reading is still reported). Compression is flagged structurally, and adds an informational, never-voting asymmetry lean naming which side is more exposed. Includes explicit 'would change the call' thresholds to watch. Rule-based and deterministic — same inputs, same read. Useful as a first call: most other signals (funding, sentiment, flows) read differently depending on this regime.

## Parameters

None.

## Call it

### cURL

```bash
curl "https://mcp.f1ow.com/v1/research/regime" \
  -H "Authorization: Bearer $F1OW_API_KEY"
```

### MCP

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "research_regime",
    "arguments": {}
  }
}
```

### TypeScript

```ts
const res = await fetch("https://mcp.f1ow.com/v1/research/regime", {
  headers: { Authorization: `Bearer ${process.env.F1OW_API_KEY}` },
});
const data = await res.json(); // the tool's result as JSON, typed in the OpenAPI spec
console.log(data);
```

### Python

```python
import os, requests

res = requests.get(
    "https://mcp.f1ow.com/v1/research/regime",
    headers={"Authorization": f"Bearer {os.environ['F1OW_API_KEY']}"},
)
data = res.json()  # the tool's result as JSON, typed in the OpenAPI spec
print(data)
```

### WebSocket

```jsonc
// wss://mcp.f1ow.com/v1/ws — subprotocol "jsonrpc-2.0", Authorization: Bearer <key>
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "research_regime",
    "arguments": {}
  }
}

// Or push a fresh result whenever it changes (minimum interval 15 s)
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "subscriptions/subscribe",
  "params": {
    "name": "research_regime",
    "arguments": {},
    "intervalSeconds": 60
  }
}
```

### x402

```bash
# No account: the first call answers 402 with a PAYMENT-REQUIRED challenge;
# an x402 client pays it in USDC on Base and retries.
curl "https://mcp.f1ow.com/x402/v1/research/regime"
```

## Sample response

Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed):

```json
{
  "axes": [
    {
      "detail": "Mayer 0.94 | 46th pct | 2d in band | 200d SMA $73069",
      "name": "Trend",
      "state": "BEAR/NEUTRAL",
      "vote": -1
    },
    {
      "detail": "30d realized 38% ann. | 42th pct vs own history",
      "name": "Volatility",
      "state": "NORMAL",
      "vote": 0
    },
    {
      "detail": "0/30 top indicators hit | MVRV-Z 0.67 | NUPL 24.5% | AHR999 0.39 (DCA band <0.45)",
      "name": "Cycle",
      "state": "NO TOP SIGNALS",
      "vote": 1
    },
    {
      "detail": "F&G 21, falling vs 30d mean 44 | 14th pct vs full history",
      "name": "Sentiment",
      "state": "EXTREME FEAR",
      "vote": 1
    },
    {
      "detail": "ETF net flows 7d $-1411M (prior 7d $-717M)",
      "name": "Liquidity",
      "state": "OUTFLOWS",
      "vote": -1
    },
    {
      "detail": "Altseason 47/100 | BTC dominance 59.6% | ETH/BTC -4.9% 30d",
      "name": "Rotation",
      "state": "MIXED",
      "vote": 0
    }
  ],
  "axesComputed": 6,
  "axesTotal": 7,
  "compressed": false,
  "posture": "NEUTRAL (vote score +0 across 6 axes)",
  "postureRule": "posture = sum of axis votes (+1 supportive / 0 neutral / -1 against): >= +3 RISK-ON, +1..+2 CAUTIOUS RISK-ON, 0 NEUTRAL, -1..-2 DEFENSIVE, <= -3 RISK-OFF. Exception: while 30d realized volatility sits at or below its 5th percentile the tape is compressed and the Trend axis contributes 0 whatever its state — its reading is still reported, only its claim on the posture is withdrawn. The Asymmetry li…",
  "volatilityPercentile": 42.2972972972973,
  "wouldChange": [
    "BTC daily close above ~$73069 (its 200d SMA, Mayer > 1.0) flips Trend bullish",
    "5+/30 checklist indicators hit -> euphoria (now 0)",
    "F&G >= 75 -> extreme greed / crowding flag (now 21)",
    "7d ETF net flows turning positive -> improving (now $-1411M)"
  ],
  "options": {
    "btc": {
      "atmIv": {
        "d30": 37.9250638590136,
        "d7": 38.9431753506621,
        "d90": 39.2867546169742,
        "source": "calculated"
      },
      "changes": [],
      "dvol": {
        "at": "2026-11-13T00:00:00Z",
        "changeVsPriorDay": -0.840000000000003,
        "days": 367,
        "percentile": 38.0108991825613,
        "source": "reported",
        "value": 39.23
      },
      "expiries": [
        {
          "atmIv": 37.3112471223181,
          "butterfly25": 0.731392513546965,
          "days": 1.99615429398148,
          "expiry": "2026-11-15T08:00:00Z",
          "forwardUsd": 68622.4,
          "riskReversal25": -6.85588547243289
        },
        {
          "atmIv": 36.0167155269591,
          "butterfly25": 0.905839276842123,
          "days": 2.99615429398148,
          "expiry": "2026-11-16T08:00:00Z",
          "forwardUsd": 68627.07,
          "riskReversal25": -5.47453702828677
        },
        {
          "atmIv": 38.5788987608621,
          "butterfly25": 0.458165640004495,
          "days": 3.99615429398148,
          "expiry": "2026-11-17T08:00:00Z",
          "forwardUsd": 68634.6425,
          "riskReversal25": -4.86940292993656
        },
        {
          "atmIv": 38.9446513215503,
          "butterfly25": 0.656100437715786,
          "days": 6.99615429398148,
          "expiry": "2026-11-20T08:00:00Z",
          "forwardUsd": 68670.3,
          "riskReversal25": -5.30908746486656
        },
        {
          "atmIv": 37.5770034274295,
          "butterfly25": 0.437361134222506,
          "days": 13.9961542939815,
          "expiry": "2026-11-27T08:00:00Z",
          "forwardUsd": 68764.16,
          "riskReversal25": -5.19406395577422
        },
        {
          "atmIv": 37.2297708474289,
          "butterfly25": 0.664317130408243,
          "days": 20.9961542939815,
          "expiry": "2026-12-04T08:00:00Z",
          "forwardUsd": 68826.94,
          "riskReversal25": -4.20658631115766
        },
        "… 5 more"
      ],
      "impliedMovePct": [
        {
          "days": 1,
          "extrapolated": true,
          "pct": 1.95295993254966
        },
        {
          "days": 7,
          "extrapolated": false,
          "pct": 5.39304380590935
        },
        {
          "days": 30,
          "extrapolated": false,
          "pct": 10.8727778786336
        }
      ],
      "indexPriceUsd": 68625.86,
      "meta": {
        "ageSeconds": 33,
        "observedAt": "2026-11-13T08:05:16Z",
        "provider": "Deribit",
        "underlying": "BTC"
      },
      "notes": [],
      "realized30d": 35.9570037879743,
      "riskReversal25At30d": -4.13282585233276,
      "skewState": "PUTS OVER CALLS",
      "spotVolCorrelation90d": 0.176970695802054,
      "termSlope7dMinus30d": 1.01811149164851,
      "termState": "FLAT",
      "volPremium": 1.96806007103923
    },
    "eth": {
      "atmIv": {
        "d30": 52.7173001866854,
        "d7": 52.2866564802324,
        "d90": 53.435695505224,
        "source": "calculated"
      },
      "changes": [],
      "dvol": {
        "at": "2026-11-13T00:00:00Z",
        "changeVsPriorDay": -0.469999999999999,
        "days": 367,
        "percentile": 45.5040871934605,
        "source": "reported",
        "value": 55.59
      },
      "expiries": [
        {
          "atmIv": 50.9143658402151,
          "butterfly25": 2.70358457921742,
          "days": 1.99615429398148,
          "expiry": "2026-11-15T08:00:00Z",
          "forwardUsd": 1933.93,
          "riskReversal25": -10.5235379490087
        },
        {
          "atmIv": 49.1492740034777,
          "butterfly25": 2.78368691655798,
          "days": 2.99615429398148,
          "expiry": "2026-11-16T08:00:00Z",
          "forwardUsd": 1934.24,
          "riskReversal25": -8.54151812033916
        },
        {
          "atmIv": 51.9307036114637,
          "butterfly25": 2.12864838929615,
          "days": 3.99615429398148,
          "expiry": "2026-11-17T08:00:00Z",
          "forwardUsd": 1934.4,
          "riskReversal25": -6.95085974135543
        },
        {
          "atmIv": 52.2871995806904,
          "butterfly25": 2.242518885231,
          "days": 6.99615429398148,
          "expiry": "2026-11-20T08:00:00Z",
          "forwardUsd": 1935.39,
          "riskReversal25": -7.04852830527137
        },
        {
          "atmIv": 51.7904274928138,
          "butterfly25": 1.64938829602769,
          "days": 13.9961542939815,
          "expiry": "2026-11-27T08:00:00Z",
          "forwardUsd": 1936.91,
          "riskReversal25": -6.11687103522829
        },
        {
          "atmIv": 52.0120351604716,
          "butterfly25": 1.61857190991675,
          "days": 20.9961542939815,
          "expiry": "2026-12-04T08:00:00Z",
          "forwardUsd": 1938.44,
          "riskReversal25": -5.2072832417525
        },
        "… 5 more"
      ],
      "impliedMovePct": [
        {
          "days": 1,
          "extrapolated": true,
          "pct": 2.66497970842786
        },
        {
          "days": 7,
          "extrapolated": false,
          "pct": 7.24091516224122
        },
        {
          "days": 30,
          "extrapolated": false,
          "pct": 15.1135802281543
        }
      ],
      "indexPriceUsd": 1934.47,
      "meta": {
        "ageSeconds": 33,
        "observedAt": "2026-11-13T08:05:16Z",
        "provider": "Deribit",
        "underlying": "ETH"
      },
      "notes": [],
      "realized30d": 49.1906745017028,
      "riskReversal25At30d": -4.87054899735999,
      "skewState": "PUTS OVER CALLS",
      "spotVolCorrelation90d": 0.131794804261301,
      "termSlope7dMinus30d": -0.430643706452983,
      "termState": "FLAT",
      "volPremium": 3.52662568498258
    },
    "impliedBidWhileCompressed": false,
    "informational": true,
    "gamma": {
      "btc": {
        "flips": [
          76832.5074174907
        ],
        "gammaState": "NEGATIVE MODELED GAMMA",
        "grossUsdPer1Pct": 329834819.687822,
        "largestGammaStrikes": [
          70000,
          72000,
          80000
        ],
        "observed": false,
        "regime": [
          "NEGATIVE MODELED GAMMA"
        ],
        "scenario": "calls_long_puts_short",
        "signedUsdPer1Pct": -176374379.632186,
        "spotUsd": 68625.86
      },
      "eth": {
        "flips": [
          2117.59300503454
        ],
        "gammaState": "NEGATIVE MODELED GAMMA",
        "grossUsdPer1Pct": 34559682.1322987,
        "largestGammaStrikes": [
          1900,
          1800,
          2200
        ],
        "observed": false,
        "regime": [
          "NEGATIVE MODELED GAMMA"
        ],
        "scenario": "calls_long_puts_short",
        "signedUsdPer1Pct": -13365053.0517942,
        "spotUsd": 1934.47
      }
    }
  },
  "generatedAt": "2026-11-13T08:05:50.0786749+00:00"
}
```

Over MCP the text report a model reads comes with it:

```text
=== Market Regime — 2026-11-13 08:05 UTC ===
Posture: NEUTRAL (vote score +0 across 6 axes)
Rule: posture = sum of axis votes (+1 supportive / 0 neutral / -1 against): >= +3 RISK-ON, +1..+2 CAUTIOUS RISK-ON, 0 NEUTRAL, -1..-2 DEFENSIVE, <= -3 RISK-OFF. Exception: while 30d realized volatility sits at or below its 5th percentile the tape is compressed and the Trend axis contributes 0 whatever its state — its reading is still reported, only its claim on the posture is withdrawn. The Asymmetry line, when present, never votes.

  Trend       BEAR/NEUTRAL       Mayer 0.94 | 46th pct | 2d in band | 200d SMA $73069
  Volatility  NORMAL             30d realized 38% ann. | 42th pct vs own history
  Cycle       NO TOP SIGNALS     0/30 top indicators hit | MVRV-Z 0.67 | NUPL 24.5% | AHR999 0.39 (DCA band <0.45)
  Sentiment   EXTREME FEAR       F&G 21, falling vs 30d mean 44 | 14th pct vs full history
  Liquidity   OUTFLOWS           ETF net flows 7d $-1411M (prior 7d $-717M)
  Rotation    MIXED              Altseason 47/100 | BTC dominance 59.6% | ETH/BTC -4.9% 30d

Would change the call:
- BTC daily close above ~$73069 (its 200d SMA, Mayer > 1.0) flips Trend bullish
- 5+/30 checklist indicators hit -> euphoria (now 0)
- F&G >= 75 -> extreme greed / crowding flag (now 21)
- 7d ETF net flows turning positive -> improving (now $-1411M)

Inputs: 6/7 axes computed

Implied vol (Deribit options; informational, no vote):
  BTC  DVOL 39.2 (38th pct 1y, -0.8 vs prior day) | ATM IV 7d 38.9 / 30d 37.9 (term FLAT) | 30d realized 36.0 → premium +2.0 pts | 25Δ RR 30d -4.1 (PUTS OVER CALLS)
  ETH  DVOL 55.6 (46th pct 1y, -0.5 vs prior day) | ATM IV 7d 52.3 / 30d 52.7 (term FLAT) | 30d realized 49.2 → premium +3.5 pts | 25Δ RR 30d -4.9 (PUTS OVER CALLS)
Options regime (modeled, dealers long calls / short puts; informational, no vote):
  BTC  options regime: NEGATIVE MODELED GAMMA | flip $76832.51 (+12.0%)
  ETH  options regime: NEGATIVE MODELED GAMMA | flip $2117.59 (+9.5%)
```

## Related tools

- [Positioning](https://www.f1ow.com/docs/tools/research_positioning) — Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching.
- [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities) — A liquidity-qualified major and mid-cap universe screened on crowding, stress, leverage, compression, trend, location and entry quality. Ranked candidates with disclosed setup rules and entry, stop and target geometry — not a forecast or a proven edge.
- [Trade Plan Review](https://www.f1ow.com/docs/tools/research_trade_plan) — Check your entry, stop and target against ATR, perp levels, liquidation distance, fees, slippage and funding. Add account size and risk for sizing, or a placement time to replay a trade from public candles. An interactive ticket in MCP Apps hosts; no orders placed or plans stored.
- [Token Dossier](https://www.f1ow.com/docs/tools/research_token_view) — One coin, fully assembled. Market data, technicals, on-chain, cited narrative synthesis, catalysts, social, ETF flows and prediction odds — the entire dossier from a single call.
