Stocklake API
MCP-native stock intelligence. Prices, fundamentals, technical ratings, and AI-analysed news — served over Streamable HTTP.
Authentication
Pass your API key as a Bearer token in the Authorization header on every request.
Get a free key instantly at /register — no credit card required.
Transport
The API uses the MCP Streamable HTTP transport (protocol version 2025-11-25). All tool calls are POST requests to the endpoint below.
Every MCP-compatible client works out of the box. Raw HTTP is also supported — see the curl section.
Rate limits
| Tier | Requests / day | Unique tickers / day |
|---|---|---|
| free | 500 | 50 |
| pro | 5,000 | 500 |
Exceeding the daily request limit returns HTTP 429. The unique-ticker limit applies across all symbol tools (get_stock, get_stock_news, get_stock_rating, get_stock_history) — querying the same ticker multiple times counts once. Exceeding the ticker limit returns a daily_ticker_limit error. Limits reset at midnight UTC.
Quickstart
get_stock free
Returns price, fundamentals, and technical indicators for a ticker.
Parameters
| Name | Type | Description |
|---|---|---|
| symbol | string | Ticker symbol, e.g. AAPL. Case-insensitive. |
Response fields
| Field | Type | Description |
|---|---|---|
| symbol | string | Ticker |
| name | string | Company full name |
| short_name | string | Display name (shorter form) |
| price | number | Current price |
| change_pct | number | Day change % |
| volume | number | Day volume |
| prev_close | number | Previous close |
| week52_high / week52_low | number | 52-week range |
| ma_50 | number | 50-day moving average |
| ma_200 | number | 200-day moving average |
| marketCap | number | Market capitalisation |
| beta | number | Beta vs market |
| pe_trailing / pe_forward | number | P/E ratios (trailing and forward) |
| dividendYield | number | Annual dividend yield |
| debtToEquity | number | D/E ratio |
| profitMargins | number | Net profit margin |
| revenueGrowth / earningsGrowth | number | YoY growth rates |
| returnOnEquity | number | ROE |
| analyst_rating | string | Analyst consensus (buy / hold / sell) |
| analyst_rating_score | number | Analyst consensus score (1=strong buy … 5=strong sell) |
| analyst_target | number | Analyst mean price target |
| indicators | object | Technical indicators: rsi, macd{macd_line, signal_line, histogram}, bollinger_bands{upper_band, middle_band, lower_band} |
| last_update | datetime | Data freshness timestamp |
get_stock_news pro
Returns AI-analysed news articles for a ticker. Each article has been processed by our AI pipeline — raw article content is not exposed.
When no articles are found, the ticker is automatically queued for the next pipeline run. Re-queuing an already-pending ticker does not count against your limit.
Parameters
| Name | Type | Description |
|---|---|---|
| symbol | string | Ticker symbol |
| limit | integer | Max articles to return. Default 10, max 50. |
| days | integer | Look-back window in days. Default 1. Hard cap: 36 hours regardless of value passed. |
Response
Outer envelope fields:
| Field | Type | Description |
|---|---|---|
| symbol | string | Ticker |
| status | string | ok empty — see below |
| count | integer | Number of articles returned |
| hours | integer | Effective look-back window in hours (max 36) |
| articles | array | Article objects (see below) |
| message | string | Present when status is empty |
Status values:
- ok — articles returned
- empty — no news found for this window; pipeline triggered in background if data was stale
Per-article fields:
| Field | Type | Description |
|---|---|---|
| title | string | Article headline |
| published_at | datetime | Publication timestamp (ISO 8601) |
| ai_sentiment | string | positive / neutral / negative |
| ai_flag_score | number | 0–10 signal strength (10 = high impact) |
| ai_summary | string | AI-generated 1–2 sentence summary of relevance to the stock |
| ai_confidence | number | 0–100 confidence score |
get_stock_rating pro
Composite technical rating on a 0–10 scale. Synthesises RSI, MACD, Bollinger Bands, and moving average trend signals. Includes the latest AI entry signal if available.
score and direction are purely technical (RSI / MACD / Bollinger Bands / moving averages).
The latest_signal field is an AI-driven entry signal from our trader engine.
Neither is the same as analyst_rating from get_stock, which reflects
analyst consensus based on fundamentals and price targets — not technical momentum.
Disagreement between these signals is normal: a stock can be technically overbought (low score) while analysts rate it a strong buy, or vice versa.
Parameters
| Name | Type | Description |
|---|---|---|
| symbol | string | Ticker symbol |
Response fields
| Field | Type | Description |
|---|---|---|
| symbol | string | Ticker |
| score | number | 0–10 composite rating |
| direction | string | BULLISH (≥6) / NEUTRAL (5) / BEARISH (≤4) |
| price | number | Current price |
| change_pct | number | Day change % |
| signals | object | Per-indicator structured breakdown: rsi, macd, bb, trend. Each includes text (human readable), value (raw number), strength (strong/moderate/weak), verdict (bullish/mild_bullish/neutral/mild_bearish/bearish), plus indicator-specific fields (macd_line, signal_line, histogram, upper, middle, lower, width, sma50, sma200) |
| volume_confirmation | object | verdict (confirming/weak/absent/unknown), today_volume, vs_10d_avg (ratio), vs_3m_avg (ratio) |
| latest_signal | object | null | Most recent AI entry decision: action, confidence (1–10 integer), rationale, created_at |
| signal_age_hours | number | null | Age of latest AI signal in hours |
| signal_fresh | boolean | True if signal is within tier freshness threshold |
| rated_at | datetime | When this rating was computed |
get_stock_history pro
Daily OHLCV price history for a ticker. Returns bars sorted oldest-first.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| symbol | string | — | Ticker symbol |
| days | integer | 30 | Number of trading days to return. Max 90. |
Response fields
| Field | Type | Description |
|---|---|---|
| symbol | string | Ticker |
| days | integer | Days requested |
| count | integer | Bars actually returned (may be less if data is newer) |
| history | array | OHLCV bars: date, open, high, low, close, volume |
search_stocks pro
Filter and rank stocks from the Stocklake universe. All parameters are optional — omit any to skip that filter.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| sector | string | — | Case-insensitive substring match. e.g. Technology, Healthcare, Financial Services |
| country | string | — | Case-insensitive substring match. e.g. United States, Germany |
| rsi_signal | string | — | oversold (RSI < 30) · overbought (RSI > 70) · neutral (30–70) |
| analyst_rating | string | — | Analyst consensus: strong_buy · buy · hold · sell · strong_sell |
| min_volume | integer | — | Minimum daily volume filter. e.g. 1000000 |
| sort_by | string | change_pct | change_pct · volume · market_cap · rating (our composite score) |
| limit | integer | 20 | Results to return. Max 20. |
Response
| Field | Type | Description |
|---|---|---|
| count | integer | Number of results |
| filters | object | Echo of applied filters |
| results | array | Stock objects (see below) |
Per-result fields:
| Field | Type | Description |
|---|---|---|
| symbol | string | Ticker |
| name | string | Company name |
| sector / industry | string | Sector and industry classification |
| country | string | Country of listing |
| price | number | Current price |
| change_pct | number | Day change % |
| volume | number | Day volume |
| market_cap | number | Market capitalisation |
| rsi | number | Current RSI value |
| analyst_rating | string | Analyst consensus |
| rating | number | Composite technical rating (0–10) |
| direction | string | BULLISH / NEUTRAL / BEARISH |
get_earnings_calendar pro
Upcoming earnings dates for all stocks in the Stocklake universe, within a configurable look-ahead window. Dates sourced from Yahoo Finance — treat is_estimate: true dates as approximate.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| days | integer | 7 | Look-ahead window in days (max 30) |
Response
| Field | Type | Description |
|---|---|---|
| window_days | number | Effective look-ahead window applied |
| from_date | string | Window start (UTC ISO) |
| to_date | string | Window end (UTC ISO) |
| count | number | Total results returned |
| results[].symbol | string | Ticker symbol |
| results[].name | string | Company short name |
| results[].sector | string | Sector |
| results[].market_cap | number | Market capitalisation in reporting currency |
| results[].earnings_date | string | Expected earnings timestamp (UTC ISO) |
| results[].earnings_window_start | string | null | Start of reported window (UTC ISO) |
| results[].earnings_window_end | string | null | End of reported window (UTC ISO) |
| results[].is_estimate | boolean | True if the date is an estimate — treat as approximate |
| results[].eps_trailing | number | null | Trailing 12-month EPS |
| results[].eps_forward | number | null | Forward EPS estimate |
Example response
get_macro_regime pro
Returns the latest macro market regime assessment produced by the internal Stocklake trader AI, together with the raw indicator snapshot (FRED, VIX term structure, CNN Fear & Greed) and a price/RSI/SMA200 snapshot of key market instruments recorded at the time the AI ran. Updated every ~4 hours, or sooner if VIX moves more than 8%.
Note: All data in this response — including market_context prices — is a point-in-time snapshot from when the assessment was made, not live. Use age_hours to judge staleness; call get_stock for live prices.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| history_count | integer | 0 | Include last N previous regime assessments (max 5). Returns regime_history array with regime, bias, confidence, rationale, assessed_at, age_hours, vix_at_assessment for each past assessment. |
Response
| Field | Type | Description |
|---|---|---|
| regime | string | RISK_OFF | CAUTIOUS | NEUTRAL | AGGRESSIVE |
| bias | string | LONG_ONLY | SHORT_ONLY | BOTH |
| confidence | number | 1–10. How clear-cut the regime call is. |
| rationale | string | Core thesis in plain language (≤300 chars) |
| key_risks | string[] | 2–3 specific tail risks that could invalidate the call |
| watch_for | string[] | 1–2 triggers that would cause a regime upgrade or downgrade |
| vix_at_assessment | number | VIX level at the time of assessment |
| assessed_at | string | UTC ISO timestamp of when assessment was made |
| age_hours | number | How many hours ago the assessment was made |
| indicators.fred | object | FRED hard data: yield_spread_10y2y, fed_funds_rate, cpi_yoy, unemployment, breakeven_10y, usd_index, m2 — each with value, date, delta_3m |
| indicators.vix_term | object | VIX / VIX3M / VIX6M last 5 closes + contango/backwardation signal |
| indicators.fear_greed | object | CNN Fear & Greed value (0=extreme fear, 100=extreme greed) and label |
| market_context | object | Price / RSI / SMA200 / perf snapshot of key instruments at assessment time (SPY, QQQ, IWM, TLT, GLD, EEM, HYG, XLK, XLF, XLE, XLV, XLU + VIX spot, TNX, CL oil). Stale — recorded when the AI ran, not live. Check age_hours. |
| market_context.spy | object | price, rsi, sma200, above_200sma, perf_1w, perf_1m, change_pct — same shape for all equity/ETF keys |
| market_context.vix | object | price, change_pct |
| market_context.tnx | object | 10Y Treasury yield: price, change_pct, change_abs |
| market_context.cl | object | WTI crude oil: price, change_pct, perf_1w |
| regime_history | object[] | Only present when history_count > 0. Array of past assessments: regime, bias, confidence, rationale, assessed_at, age_hours, vix_at_assessment. |
Example response
Claude Desktop
Add to claude_desktop_config.json:
Claude Code
Add via CLI or .claude/mcp.json:
Python (fastmcp)
curl / raw HTTP
Errors
| HTTP status | Meaning |
|---|---|
| 401 | Missing or invalid Authorization: Bearer token |
| 429 | Daily rate limit exceeded. Resets midnight UTC. |
| 200 + isError: true | Tool-level error (e.g. ticker not found, tier required). Check the content[0].text field. |
Tiers
| Feature | Free | Pro |
|---|---|---|
| get_stock | ✓ | ✓ |
| get_stock_news | – | ✓ |
| get_stock_rating | – | ✓ |
| get_stock_history | – | ✓ |
| search_stocks | – | ✓ |
| get_earnings_calendar | – | ✓ |
| get_macro_regime | – | ✓ |
| Requests / day | 500 | 5,000 |
| Unique tickers / day | 50 | 500 |
| Pipeline priority | standard | priority |
| Support | – |