MCP server for Signal Lord — know which Bitcoin regime you're in and the probabilities of what happens next. Regime detection, AI analysis, and real-time market intelligence.
Signal Lord MCP server demonstrates solid fundamentals with 20 well-named tools, consistent parameter schemas, and good descriptions overall. All tools follow verb_noun naming (get_*, signallord_ prefix). Every tool has a description (average ~180 chars). Input parameters are typed (string, integer) with descriptions. However, there are critical gaps: (1) output schemas are NOT documented, no tool declares what fields the response contains, (2) error handling is minimal, no guidance on retryable vs fatal errors, (3) parameter constraints are informal (e.g., 'days: 7-1825' stated in description, not as JSON Schema bounds), (4) many responses refer to premium tiers without clear fallback behavior for free tier. The server is functional and agent-usable, but lacks the production-grade robustness of tools scoring 80+. Average per-tool score: 72 (range 65-78).
Ask Odin a specific question about Bitcoin markets. Odin has access to all Signal Lord data and can reason about market conditions, correlations, historical patterns, and risk. Questions should be about Bitcoin/crypto markets. Requires premium access.
Get current Bitcoin price, volume, derivatives, and exchange flow data. Returns real-time BTC price, 24h high/low, volume, open interest, funding rate, perpetual basis, and 24h liquidation volume. Premium tier additionally includes exchange net flow, BTC dominance, and stablecoin supply from on-chain data.
Capitulation Index — composite of volume anomaly, liquidation surge, funding rate dislocations, OI shift, and price velocity. Scores 0-100; high values flag classic capitulation conditions (panic selling under heavy leverage unwind). Components are returned so an agent can inspect which legs are driving the score. Extracted from the /api/premium/all payload.
Get Signal Lord's current composite Bitcoin market score (0-100). Scores above 70 indicate bullish conditions, below 30 indicate bearish conditions. The composite is derived from 6 gauges: Liquidity, Risk Appetite (sentiment + macro), On-Chain, Institutional, Positioning, and Momentum. Each gauge is 0-10, the composite scales their average to 0-100.
Output schemas are not documented. Tools declare input parameters (days, response_format) but do NOT document what fields the response contains (e.g., signallord_get_regime returns {current, history} but this is only inferred from descriptions, not in schema). Agents cannot plan downstream tool calls without knowing response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Cycle Bottom Probability — composite weighted accumulation score (0-100). Aggregates independent bottoming signals (deep on-chain unrealized loss, miner capitulation, derivatives flush, sentiment despair, etc.) into a single score. ``current.signals`` lists which legs are firing. ``delta_30d`` reports the 30-day change in score.
Cycle Top Probability — composite weighted distribution score (0-100). Aggregates topping signals (Pi Cycle proximity, long-term holder distribution, retail attention spike, funding euphoria, etc.) into a single score. ``current.signals`` lists which legs are firing. ``delta_30d`` reports the 30-day change in score.
Check which Signal Lord signals are currently stale due to upstream data issues. Use this before acting on regime, gauges, indicators, or playbooks. A signal listed as `stale` means the underlying data source is degraded or dark; downstream values may be estimated or held over.
Get individual scores for Signal Lord gauges with underlying metrics. Free tier: 4 gauges (Liquidity, Risk Appetite, Positioning, Momentum). Premium tier: all 8 gauges (adds On-Chain, Institutional). Each gauge is 0-10 where higher = more bullish.
Get historical gauge scores for trend analysis. Returns daily snapshots with composite and individual gauge scores. Use this to identify regime shifts and score trends over time.
Hash Ribbons — 30/60-day hashrate MA cross + 30d divergence z-score. A bullish cross (30d > 60d) after a capitulation has historically marked strong miner-driven accumulation phases. ``current`` is the latest cross + divergence context; ``crosses`` lists recent crosses; ``divergence`` is the rolling z-score series against a 1y backward baseline.
Get institutional Bitcoin market data. Requires premium API key. Includes ETF net flows (24h and 7d), Coinbase premium (price difference between Coinbase and global exchanges — positive = US institutional buying), CME basis trade (annualized carry from futures-spot spread), and Signal Lord's composite institutional regime score (0-10).
Get macroeconomic indicators relevant to Bitcoin. Returns DXY (dollar index) with daily change, VIX (volatility index) with daily change, Fear & Greed index with classification, MVRV Z-Score, credit spreads, real yields, and the full liquidity stack (RRP, TGA, Fed balance sheet, net liquidity). Each section includes Signal Lord's composite score (0-10 scale).
Multi-timeframe trend alignment — daily, weekly, monthly trend bits. Returns a composite from -3 (all timeframes bearish) to +3 (all bullish). +3 and -3 alignment historically precedes the highest-conviction moves.
Get Odin's current Bitcoin market analysis. Odin is Signal Lord's AI analyst that synthesizes gauge data, on-chain metrics, macro conditions, and sentiment into a coherent market read with conviction level. Analysis is cached for ~4 hours and refreshed automatically. Free tier: Odin analysis + Devil's Advocate (Loki). Premium tier: Enriched multi-timeframe Odin analysis + Loki + News Intelligence (Huginn).
Pi Cycle Top indicator — has the 111-day MA crossed 2x the 350-day MA? A historically reliable cycle-top warning: every prior Bitcoin cycle top has been within ~3 days of a Pi Cycle cross. ``current.cross_state`` flags whether a cross is active, recent, or distant.
Realized Price state machine — is spot above or below the on-chain cost basis? Spot trading below realized price has historically marked cycle bottoms; reclaiming it has marked the early-bull phase. ``current.state`` reports the current regime (above/below) and the most recent reclaim/loss event.
Detect the current Bitcoin market regime with historical context and outcome probabilities. This is Signal Lord's flagship intelligence tool. Instead of raw numbers, it tells you: - **Where are we?** Current regime (Trending Bull, Trending Bear, Range Bound, High Vol Chop, Capitulation, Euphoria) - **What does this look like?** Most similar historical period (e.g., "Similar to Summer 2024 Chop") - **What usually happens next?** Probability distribution of outcomes based on pattern matching - **What's the expected move?** Weighted average price move % and timeframe. Six regimes are detected using 20+ features including price action, derivatives, on-chain flows, institutional activity, and macro conditions. Regime transitions (e.g., range_bound → trending_bull) are the highest-value signals. Free tier: regime label, most similar period name and similarity %. Premium tier: outcome probabilities, expected moves, full historical match details, catalysts, feature vectors, regime scores.
Get historical regime classifications from Signal Lord snapshots. Shows how the detected regime has evolved over time. Useful for identifying regime transition patterns and duration statistics. Uses daily snapshot data rather than the live 2-minute engine cycle.
Reserve Risk — Price divided by HODL Bank, banded into cycle phases. Low values (green band) historically mark high-conviction long-term accumulation zones; high values (red band) mark distribution. ``current`` returns the current value + band; ``band_distribution`` shows how rare the current band is across the dataset.
Get what changed in Bitcoin markets since yesterday. Compares the current state to the most recent daily snapshot and returns significant changes across all categories. Useful for daily briefings.
Parameter constraints (days: 7-1825, status enums) are stated informally in descriptions but NOT enforced in JSON Schema (no minimum, maximum, or enum constraints visible in the code). This allows agents to pass invalid values (e.g., days: 0 or days: 10000) without client-side validation, forcing the server to reject and guide recovery.
Tier-gated behavior not clearly specified. Tools mention 'Free tier: X, Premium tier: Y' (e.g., signallord_get_regime, signallord_get_gauge_breakdown) but do NOT document what happens when an agent on the free tier calls a premium-only tool. Does it return partial data, an error with retry guidance, or fail silently? No error handling guidance provided.
No error handling guidance. Tools do not document retryable errors (e.g., 'API rate limit, retry in 30 seconds'), user-fixable errors (e.g., 'Invalid API key, check SIGNALLORD_API_KEY'), or fatal errors (e.g., 'Service unavailable, contact support'). Agents cannot distinguish between transient and permanent failures.
API key is injected via environment variable (SIGNALLORD_API_KEY), correctly NOT exposed as a tool parameter. However, no fallback behavior or validation is documented. If the key is missing, what happens? Does the tool fail gracefully with guidance, or does it crash?
signallord_ask_odin has a required 'question' parameter, but no guidance on question length constraints ('10-500 characters' in description) is enforced as a JSON Schema constraint (minLength, maxLength). Agents may pass questions outside this range.
response_format parameter is present in all tools with default 'json', but the markdown output is not formally documented. Tools mention 'json or markdown' but do NOT document the markdown structure for each tool. Agents cannot predict what the markdown output will look like, risking misuse.
signallord_get_data_health has a 'scope' parameter that allows operator-only access ('sources' returns 403 for non-operators). This permission gate is documented in the description but NOT enforced in the tool definition. The tool should validate permissions upfront and return a clear error, not rely on a downstream 403.