← Back to Blog
Product · August 2026 · 7 min read

get_signals: One Merged Feed for AI Stock Trading Signals

M
Michael · Builder & owner of Stocklake
DeMark: countdown_complete
RSI: 22 (oversold)
VIX Fix: 100th %ile
News: no coverage
Sentiment: neutral
LBRT
LONG
Score 78 · screener
Triple exhaustion confluence — DeMark, RSI, VIX Fix all agree.
Discovery ideas becoming signals

If you're building an agent that trades, screens, or just answers "what's going on with this stock," you don't want to wire up eleven separate feeds yourself — technical exhaustion screeners (DeMark, Elliott Wave, Williams %R), a fundamentals/news pipeline, sentiment enrichment, a couple of social sources — and then write your own logic to dedup them, merge the ones that agree, and throw out the ones that are just noise. That's the actual problem get_signals solves. One call in, one clean answer out: a scored, sourced, expiring thesis with a direction and a rationale attached, already deduped and synthesized across however many sources flagged it.

Under the hood it is called Signals.

A signal isn't a headline

Here's the difference in practice. A raw feed gives you this, unfiltered, one line per source, no synthesis:

DeMark screener:  LBRT — countdown_complete, setup_direction=down
RSI screener:     LBRT — RSI 22 (oversold)
VIX Fix screener: LBRT — vix_fix percentile 100, spike=true
News pipeline:    LBRT — no recent coverage
Sentiment:        LBRT — neutral

Five lines, three of which agree on the same thing, two of which have nothing to add. Reading that and deciding "is this actually worth attention" is exactly the work an agent — or a person — shouldn't have to redo for every symbol, every hour. A signal has already done that reading:

{
  "symbol": "LBRT",
  "direction": "LONG",
  "signal_score": 78,
  "source": "screener",
  "rationale": "Complete DeMark 13 + RSI 22 oversold + VIX Fix 100th %ile
                panic spike. Rare triple exhaustion confluence suggests
                downtrend likely nearing bottom."
}

Same underlying data, but the merge already happened: three independent technical reads agreeing gets scored higher than one screener firing alone, and the "no signal here" sources (news, sentiment) are silently dropped rather than padding the response with empty rows. This isn't a hunch — it's a synthesized, sourced, confidence-scored read.

Signals
LBRT
LONG
score 78
Triple exhaustion confluence — DeMark, RSI, VIX Fix
MGM
LONG
score 91
Acquisition rumor, reported 25% premium
ORCL
LONG
score 78
AI cloud catalyst, momentum breakout
NVDA
SHORT
score 74
RSI overbought, extended above 200-day average
The dashboard's Signals tab — flagged news and AI-screened setups, merged into one feed

Why signals expire

Every signal carries an expires date, and by default the tool only returns ones that are still active. That's deliberate, not a limitation. A signal is a read on the market right now — a DeMark exhaustion count, an oversold RSI reading, a fresh news catalyst. All of that has a shelf life. The setup that justified a long thesis last week may have already played out, or the market context around it may have shifted enough that the same reading no longer means the same thing.

Same instinct as news: a headline from four weeks ago is very likely not relevant to a decision you're making today, even if it's still sitting in the database. We don't delete it — it stays there for historical reporting, backtesting, "how did we do" reviews — but it's not what gets handed to an agent asking what's worth attention now. Signals work the same way. We keep the full history so the pipeline itself can be measured and improved over time, but what you get back from a live query is only what's still current. Latest and greatest, not an archive.

Try it

Same tool, new name. Direction, source filter — unchanged. The quality floor is now one number instead of two: min_signal_score, a single 0-100 composite that replaced the old conviction/flag-score pair (they're still accepted for backward compatibility, but no longer do anything — see below):

await client.call_tool("get_signals", {
  "direction": "LONG",
  "min_signal_score": 70,
  "source": "screener",
  "limit": 10
})

What comes back — trimmed to one entry for the example:

{
  "count": 1,
  "filters": { "direction": "LONG", "min_signal_score": 70 },
  "signals": [
    {
      "symbol": "LBRT",
      "direction": "LONG",
      "signal_score": 78,
      "source": "screener",
      "rationale": "Complete DeMark 13 + RSI 22 oversold + VIX Fix 100th %ile
                    panic spike. Price far below SMA200 offers mean-reversion
                    target. Rare triple exhaustion confluence suggests
                    downtrend likely nearing bottom.",
      "expires": "2026-07-26",
      "flagged_at": "2026-07-25T10:07:29Z"
    }
  ]
}

Filtering to a single stock is the same idea, one level down — get_stock_research returns a signal field for the symbol you asked about, same vocabulary as the full-feed query.

min_conviction and min_flag_score still exist in the tool's schema — a caller who hasn't switched yet won't get a hard error — but neither one filters anything any more. signal_score folds conviction, confidence, and flag score together with each source's own track record, so it's a strictly better single number to filter and sort on than any one of the three ever was alone.

A few real ways to use it

This isn't a hypothetical MCP tool — it's the thing an agent reaches for when a person asks a vague question and needs something concrete to answer with. A few shapes that comes in:

1. "What's worth watching right now" — no symbol given, just a scan.

Anything worth looking at today? I don't have a specific stock in mind.
Assistant
Recent
Signal scan
Portfolio review
Weekly screener run
get_signals({ min_signal_score: 80, limit: 10 })
Two stand out. LBRT — long setup, signal_score 78: a completed DeMark exhaustion count plus RSI at 22 (oversold) plus a VIX Fix spike at the 100th percentile, all lining up at once. That's three independent technical exhaustion signals agreeing, which is rare. MGM also flagged, but from the news side — an acquisition rumor with a reported 25% premium, scoring 91 since it's a binary, time-sensitive event, not a slow-building technical setup. Different kind of signal, different kind of urgency — one's "the chart says this may be near a bottom," the other is "something is happening right now."
No symbol given — Claude reaches for get_signals to scan the whole feed

2. "Is there anything going on with this stock" — symbol-first, not scan-first.

I'm holding ORCL. Anything I should know about?
Assistant
Recent
Signal scan
ORCL check
Weekly screener run
get_stock_research({ symbol: "ORCL" })
Yes — there's an active long signal from the screener pipeline, signal_score 78, flagged for an AI cloud catalyst and a momentum breakout. It's sitting alongside a bullish AI research summary (cloud ARR up 23% YoY) and a rating of "above" its 200-day average. Nothing urgent or contradicting your position — it reads as reinforcing, not a reason to act.
Symbol-first — one call folds the signal into the full research picture

3. Direction-and-score filtered — building a shortlist for further research, not just a headline scan.

Give me short setups only, high conviction, sourced from actual screeners — not news noise.
Assistant
Recent
ORCL check
Short setups scan
Weekly screener run
get_signals({ direction: "SHORT", min_signal_score: 80, source: "screener", limit: 10 })
Three came back that fit — all technical-exhaustion driven rather than news-driven, since you asked to exclude that source. Each has its own rationale attached (RSI overbought level, distance from 200-day average, sector-relative strength), so you can sanity-check the "why" per name instead of just trusting a score.
Filtered by direction, score, and source — a shortlist, not a headline dump

4. Checking multiple holdings at once — what changed since the last look, not a fresh scan per symbol.

I'm holding NVDA, ORCL, and MGM. Anything changed overnight?
Assistant
Recent
Short setups scan
Overnight portfolio check
Weekly screener run
get_stock_research({ symbol: "NVDA" }) get_stock_research({ symbol: "ORCL" }) get_stock_research({ symbol: "MGM" })
NVDA picked up a new short signal overnight — RSI overbought, extended well above its 200-day average, signal_score 74. ORCL and MGM are unchanged from yesterday's reads, both still active and still long. Worth a look at NVDA; the other two don't need attention yet.
Multiple holdings, one pass — the delta since your last check, not a re-scan of everything
One conviction number without a rationale isn't worth much — the point of merging sources before you see it is that by the time you're reading it, dedup and AI synthesis already did the noise-filtering. What's left is what an agent can actually reason about and hand you an answer for, not a raw feed you'd have to filter yourself.

What this means if you're building right now

Reach for get_signals: eleven sources' worth of noise, already reduced to the handful of reads that agree with each other and are still current enough to matter.

Frequently asked questions

What does the get_signals MCP tool actually return?

A deduped, scored list of active trading ideas merged across eleven independent sources — technical exhaustion screeners, news, and sentiment enrichment. Each entry has a symbol, direction, signal_score, source, and a plain-language rationale, not just a raw indicator dump.

Why do signals expire instead of staying in the feed forever?

A signal is a read on the market right now — a completed DeMark count, an oversold RSI reading, a fresh news catalyst — and all of that has a shelf life. Expired signals aren't deleted, they're just excluded from what a live query returns by default, the same way a stale headline shouldn't drive today's decision even though it's still in the database.

Are min_conviction and min_flag_score still usable filters?

They still exist in the tool's schema so older calls don't error out, but neither one filters anything anymore. Use min_signal_score instead — a single 0-100 number that already folds conviction, confidence, and flag score together with each source's track record.

Do I need a Pro API key to call get_signals?

Yes — the live signals feed is a Pro-tier tool, alongside insider activity, sector intelligence, and the deep-dive research endpoints. The free and guest tiers cover raw price, fundamentals, technicals, and headlines, but not this AI-curated layer on top.