signal-scanner
YAML-rule stock/crypto screener: define a watchlist + plain rules (RSI, SMA cross, volume, 52-week) and get matches via console, Telegram, or MCP. Keyless (yfinance).
README
signal-scanner — rule-based stock/crypto screener with alerts

Define a watchlist and a ruleset (plain YAML); the scanner pulls market data, computes indicators, and tells you which symbols match — on the console, in Telegram, or from any MCP host (Claude Desktop / Claude Code).
Built once, reskinned per client: swap
watchlist.txt+rules.yaml, ship.
Why it's different
- Keyless by default. Market data via yfinance — no API key. Works for stocks, ETFs, FX (
EURUSD=X) and crypto (BTC-USD). Demo it anywhere. - No-code rules. Clients edit
rules.yaml(conditions on indicators) — never the code. - Honest signals. Indicators are computed from closed bars (no look-ahead); a symbol with no data is reported, never faked.
- Delivery that degrades. Telegram alerts when a bot token is set; otherwise prints to console. The scanner always runs.
- Three surfaces, one engine. CLI (one-shot or
--watch), Telegram push, and an MCPscantool.
Indicators & rules
Indicators per symbol: price, pct_change, rsi, sma_fast, sma_slow,
sma_cross (golden/death), vol_ratio (vs 20-day avg), pct_from_52w_high, pct_from_52w_low.
A rule fires when all its conditions are true:
rules:
- name: oversold
when:
- {indicator: rsi, op: "<", value: 30}
- name: volume_spike_up
when:
- {indicator: vol_ratio, op: ">", value: 2.0}
- {indicator: pct_change, op: ">", value: 1.0}
Quickstart
pip install -r requirements.txt
PYTHONUTF8=1 python tests/test_smoke.py # deterministic, no network — proves the engine
python -m signal_scanner # scan the watchlist once, print matches
python -m signal_scanner AAPL MSFT BTC-USD # scan ad-hoc symbols
python -m signal_scanner --watch # loop every SCAN_INTERVAL_S (default 15m)
python -m signal_scanner --notify # also push matches to Telegram (if configured)
Telegram (optional)
Create a bot with @BotFather, get the token; get your chat id from @userinfobot. Then in .env:
TELEGRAM_BOT_TOKEN=...
TELEGRAM_CHAT_ID=...
As an MCP server (Claude Desktop)
{
"signal-scanner": {
"command": "python",
"args": ["-m", "signal_scanner.server"],
"cwd": "C:/path/to/signal-scanner"
}
}
Use the full path to your Python (e.g. the one where you ran pip install -r requirements.txt) if python isn't on PATH. Then ask Claude: "Run my scanner" or "Any signals on NVDA and BTC-USD?" — it calls the scan tool.
Configuration
All knobs in config.py / .env (see .env.example): RSI period, SMA fast/slow,
volume window, lookback, poll interval, data backend, Telegram. A client reskin is
usually just watchlist.txt + rules.yaml.
Architecture
watchlist.txt ─┐
├─ scanner.py ─ data.py(yfinance) ─ indicators.py ─ rules.py(rules.yaml)
rules.yaml ────┘ │
signals ──> console / Telegram / MCP `scan`
Reuses the mcp-factory contract (Result, formatting, cache) so it composes with the rest of the catalog.
License
MIT.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.