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.
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.
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.
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.
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.
2. "Is there anything going on with this stock" — symbol-first, not scan-first.
3. Direction-and-score filtered — building a shortlist for further research, not just a headline scan.
4. Checking multiple holdings at once — what changed since the last look, not a fresh scan per symbol.
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.
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.
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.
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.
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.