Skip to main content
Glama
signal-scanner

signal-scanner

signal-scanner — rule-based stock/crypto screener with alerts

signal-scanner MCP server

License: MIT Python MCP

signal-scanner - live scan demo

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 MCP scan tool.

Related MCP server: TradingView MCP

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.

Available Tools

1 tool
scanA
Read-onlyIdempotent

Screen symbols against the ruleset and return which rules fired per symbol.

Examples: - "Run my scanner" -> symbols=[] - "Scan AAPL, MSFT and NVDA" -> symbols=['AAPL','MSFT','NVDA'] - "Any signals on bitcoin?" -> symbols=['BTC-USD']

Inputs: params (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.8/5.0

    Scored across 1 tool

    Disambiguation5/5

    There is only one tool, so there is no possibility of misselection or overlap with another operation. An agent cannot confuse 'scan' with anything else on this server.

    Naming Consistency4/5

    With a single tool there is no internal inconsistency to violate, which is inherently predictable. However, 'scan' is a bare verb with no noun component, so it doesn't model the conventional verb_noun pattern.

    Tool Count2/5

    One monolithic tool carries the entire server's surface, which is too thin for a domain that implies ruleset management and result inspection. Everything must funnel through a single overloaded entry point.

    Completeness3/5

    Scanning symbols is covered, but there is no way to list, create, edit, or validate the ruleset the scanner runs against, nor to retrieve or persist prior results. The core action exists, but the lifecycle around it is a dead end.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      A Model Context Protocol (MCP) server providing comprehensive stock screening capabilities through Yahoo Finance. Enables LLMs to screen stocks based on technical, fundamental, and options criteria, with support for watchlist management and result storage.
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides TradingView-style market analysis with OHLCV candles, 19 technical indicators, a screener, and a backtester using public Yahoo Finance data without API keys.
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      MCP server for TradingView's market screener API, enabling stock, forex, crypto, and ETF screening, technical analysis, and investor workflows via Claude or CLI.
      12
      260 npm
      52
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Global stock search, preset screens, price history and technicals, dated company news, UCITS ETF/ISIN research, company risk and macro. Public research needs no API key; sign in for personal portfolios. Coverage and freshness are explicit.
      48
      MIT