{"openapi":"3.0.3","info":{"title":"Crypto Signal API","version":"1.1.0","description":"Real-time cryptocurrency trading signals computed from Binance candle data. Indicators: RSI, MACD, EMA (9/21/50), Bollinger Bands, Stochastic RSI, ATR, Volume. No API key required.","contact":{"url":"https://api.lazy-mac.com"}},"servers":[{"url":"https://api.lazy-mac.com/crypto-signal"}],"components":{"schemas":{"Indicators":{"type":"object","properties":{"price":{"type":"number","description":"Last close price"},"rsi":{"type":"number","nullable":true,"description":"RSI(14)"},"macd":{"type":"object","nullable":true,"properties":{"MACD":{"type":"number"},"signal":{"type":"number"},"histogram":{"type":"number"}}},"ema":{"type":"object","properties":{"ema9":{"type":"number","nullable":true},"ema21":{"type":"number","nullable":true},"ema50":{"type":"number","nullable":true}}},"bollingerBands":{"type":"object","nullable":true,"properties":{"upper":{"type":"number"},"middle":{"type":"number"},"lower":{"type":"number"}}},"stochRsi":{"type":"object","nullable":true,"properties":{"k":{"type":"number"},"d":{"type":"number"}}},"atr":{"type":"number","nullable":true,"description":"Average True Range (14)"},"volume":{"type":"object","properties":{"current":{"type":"number"},"average":{"type":"number","nullable":true},"ratio":{"type":"number","nullable":true,"description":"current/average ratio"}}}}},"SignalDetail":{"type":"object","properties":{"name":{"type":"string","description":"Indicator name"},"score":{"type":"integer","description":"Contribution score (-2 to +2)"},"reason":{"type":"string"}}},"Signal":{"type":"object","properties":{"action":{"type":"string","enum":["STRONG_BUY","BUY","HOLD","SELL","STRONG_SELL"]},"strength":{"type":"string","enum":["strong","moderate","weak"]},"confidence":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of maximum indicator agreement"},"score":{"type":"integer","description":"Aggregate score across all indicators"},"maxScore":{"type":"integer","description":"Maximum possible absolute score"},"details":{"type":"array","items":{"$ref":"#/components/schemas/SignalDetail"}}}},"ScreenerResult":{"type":"object","properties":{"symbol":{"type":"string"},"price":{"type":"number"},"change24h":{"type":"number","description":"24h price change %"},"volume24h":{"type":"number"},"signal":{"type":"string","enum":["STRONG_BUY","BUY","HOLD","SELL","STRONG_SELL"]},"strength":{"type":"string"},"confidence":{"type":"integer"},"score":{"type":"integer"}}},"Candle":{"type":"object","properties":{"openTime":{"type":"integer","description":"Unix ms timestamp"},"open":{"type":"number"},"high":{"type":"number"},"low":{"type":"number"},"close":{"type":"number"},"volume":{"type":"number"},"closeTime":{"type":"integer"}}},"Error":{"type":"object","properties":{"error":{"type":"string"}}}}},"paths":{"/":{"get":{"summary":"API info and available endpoints","operationId":"getInfo","responses":{"200":{"description":"API metadata","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"endpoints":{"type":"array","items":{"type":"string"}}}}}}}}}},"/health":{"get":{"summary":"Health check","operationId":"healthCheck","responses":{"200":{"description":"Service is healthy","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"service":{"type":"string"},"ts":{"type":"string","format":"date-time"}}}}}}}}},"/version":{"get":{"summary":"Service version","operationId":"getVersion","responses":{"200":{"description":"Version info","content":{"application/json":{"schema":{"type":"object","properties":{"service":{"type":"string"},"version":{"type":"string"},"ts":{"type":"string"}}}}}}}}},"/mcp":{"get":{"summary":"MCP endpoint info (GET-friendly)","operationId":"getMcpInfo","responses":{"200":{"description":"MCP server description and usage hint"}}},"post":{"summary":"MCP JSON-RPC 2.0 endpoint","operationId":"postMcp","description":"Supports methods: initialize, tools/list, tools/call. Tools: get_crypto_signal, get_crypto_indicators, screen_crypto_market.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"type":"integer"},"method":{"type":"string"},"params":{"type":"object"}},"required":["jsonrpc","method"]}}}},"responses":{"200":{"description":"JSON-RPC 2.0 response"}}}},"/api/v1/signal/{symbol}":{"get":{"summary":"Buy/Sell/Hold signal with full indicator breakdown","operationId":"getSignal","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string"},"description":"Binance trading pair (e.g. BTCUSDT, ETHUSDT)"},{"name":"interval","in":"query","schema":{"type":"string","enum":["1m","5m","15m","1h","4h","1d"],"default":"1h"},"description":"Candle interval"}],"responses":{"200":{"description":"Trading signal with all indicators","content":{"application/json":{"schema":{"type":"object","properties":{"symbol":{"type":"string"},"interval":{"type":"string"},"timestamp":{"type":"integer"},"signal":{"$ref":"#/components/schemas/Signal"},"indicators":{"$ref":"#/components/schemas/Indicators"}}}}}},"400":{"description":"Invalid symbol or Binance error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/indicators/{symbol}":{"get":{"summary":"Technical indicators only (no signal)","operationId":"getIndicators","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string"}},{"name":"interval","in":"query","schema":{"type":"string","default":"1h"}}],"responses":{"200":{"description":"Technical indicators","content":{"application/json":{"schema":{"type":"object","properties":{"symbol":{"type":"string"},"interval":{"type":"string"},"timestamp":{"type":"integer"},"indicators":{"$ref":"#/components/schemas/Indicators"}}}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/candles/{symbol}":{"get":{"summary":"Raw OHLCV candle data from Binance","operationId":"getCandles","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string"}},{"name":"interval","in":"query","schema":{"type":"string","default":"1h"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"description":"Number of candles to return"}],"responses":{"200":{"description":"Candle data array","content":{"application/json":{"schema":{"type":"object","properties":{"symbol":{"type":"string"},"interval":{"type":"string"},"count":{"type":"integer"},"candles":{"type":"array","items":{"$ref":"#/components/schemas/Candle"}}}}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/screener":{"get":{"summary":"Scan top-volume USDT pairs for trading signals","operationId":"screenMarket","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"description":"Number of top pairs to scan by 24h volume"},{"name":"interval","in":"query","schema":{"type":"string","default":"1h"}},{"name":"signal","in":"query","schema":{"type":"string","enum":["STRONG_BUY","BUY","HOLD","SELL","STRONG_SELL"]},"description":"Filter results to only this signal type"}],"responses":{"200":{"description":"Screener results sorted by score descending","content":{"application/json":{"schema":{"type":"object","properties":{"timestamp":{"type":"integer"},"interval":{"type":"string"},"filter":{"type":"string","nullable":true},"count":{"type":"integer"},"results":{"type":"array","items":{"$ref":"#/components/schemas/ScreenerResult"}}}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}