An alerting engine, not a charting replacement. Set price, RSI/MACD/SMA, and full Pine Script v5 conditions on 10,000+ stocks and crypto — delivered by ntfy push, email, or Telegram, and readable by any AI agent via MCP, HTTP API, or CLI.
npx -y github:dzianisv/mkt-alerts try # Downloads the mkt engine, runs a local price check, # and fires a demo alert — no signup, no API key, no clone.

MIT licensed · Self-host or request access · The full CLI ships via npx -y github:dzianisv/mkt-alerts today (@vibetechnologies/mkt-alerts on npm)
Read prices and alerts from your agent, manage alerts from your terminal or backend.
Drop into Claude Desktop, Claude Code, Cursor, or any MCP-compatible agent. mkt-alerts ships its own stdio MCP server that both reads and manages alerts — list_alerts, add_alert, remove_alert.
Private, bearer-authenticated REST. GET /quotes, GET /alerts, POST /alerts, DELETE /alerts/:id. Works from any language.
npx -y github:dzianisv/mkt-alerts try — no install. Set alerts from your terminal or agent scripts, with a mandatory data-source evidence gate.
Four integration paths, same alerting engine underneath.
# mkt-alerts ships its OWN stdio MCP server — READ/WRITE.
# Add to your MCP client config (Claude Desktop, Claude Code, Cursor):
{
"mcpServers": {
"mkt-alerts": {
"command": "npx",
"args": ["-y", "github:dzianisv/mkt-alerts", "mcp"]
}
}
}
# Tools (manage alerts, not just read):
# list_alerts()
# add_alert(...)
# remove_alert(id)
# ── Optional companion (third-party, read-only) ──────────────
# The 'mkt' Go binary (github.com/stxkxs/mkt) exposes a separate
# READ-ONLY MCP with market-data tools. Install it on PATH first:
# get_quote query_history get_alerts get_portfolio
# {
# "mcpServers": { "mkt": { "command": "mkt", "args": ["mcp"] } }
# }Agents and humans can subscribe to any of these conditions via the API or CLI.
| Condition | Type | Example |
|---|---|---|
above / below | Price | BTC-USD below 90000 |
pct_up / pct_down | % move | AAPL pct_down 5% |
rsi_above / rsi_below | RSI | ETH-USD rsi_below 30 |
sma_cross_above / sma_cross_below | SMA cross | SOL-USD sma_cross_above |
macd_cross | MACD | BTC-USD macd_cross |
pine | Pine Script v5 | custom indicator, any period |
RSI period is fixed at 14 and SMA-cross period at 20 — there is no CLI flag to change them yet. For any other period or custom logic, use a Pine Script v5 condition.
Write real ta.sma/ta.rsi/custom Pine Script v5 logic. It runs on your own checker via an isolated PineTS subprocess — not on TradingView's servers, and not against your alert plan's quota. Evaluated every ~15 minutes.
# golden-cross.pine — plot a "signal" series
//@version=5
indicator("golden cross")
plot(ta.sma(close, 20) - ta.sma(close, 50), "signal")
# Arm it — runs SERVER-SIDE in an isolated PineTS subprocess,
# evaluated every ~15 minutes. Never on TradingView's servers,
# never against your alert plan's quota.
npx -y github:dzianisv/mkt-alerts add \
--symbol BTC-USD \
--pine golden-cross.pine \
--signal signal \
--fire-on cross_up \
--reason "SMA20 crossing above SMA50 confirms trend flip" \
--channel email:you@example.com--signal signal names which plot() series to read (default "signal"). --fire-on cross_up is edge-triggered — fires when the signal crosses 0 upward. truthyis state-based — fires on every check while the signal is currently positive (e.g. "while oversold").
An in-process OpenClaw plugin runs the mkt-alerts checker inside your agent's gateway process. When an alert fires, it wakes the agent so it acts on the condition automatically — on the last active channel. No separate service to babysit.
openclaw plugins install @vibetechnologies/openclaw-mkt-alerts openclaw gateway restart # The plugin is publishing to npm now. Until it lands, point OpenClaw # at it via your plugins.load.paths config. # # Live prices from Coinbase (crypto) and Yahoo Finance (stocks), # public key-free endpoints. Zero runtime deps (Node built-ins only: # fetch/fs/path). MIT licensed. # # Note: the plugin's Pine, match:"sequence", and volume_above # conditions are accepted for config parity but DEFERRED — they do # not fire yet.
Public, key-free price feeds — Coinbase for crypto, Yahoo Finance for stocks.
Node built-ins only — fetch, fs, path. Nothing else to install or trust.
Read the plugin source, fork it, or vendor it — no lock-in.
Hermes is a scheduled-prompt agent — not a separate mkt-alerts plugin. It just runs the same CLI or HTTP call a human would, on a schedule. Two patterns work today.
# Pattern A — shell the CLI on a schedule. # Requires ~/.config/mkt-watch/auth.json present on the runner. npx -y github:dzianisv/mkt-alerts add \ --symbol BTC-USD --condition below --value 90000 \ --reason "reclaim entry" \ --data-source "200wMA $62,640 from TradingView 210 weekly bars" \ --channel ntfy:my-topic
# Pattern B — POST the HTTP API directly with a bearer token.
curl -sS -X POST "$MKT_API_URL/alerts" \
-H "Authorization: Bearer $MKT_TOKEN" -H "Content-Type: application/json" \
-d '{"symbol":"BTC-USD","desk":"crypto","reasoning":"reclaim entry [data: 200wMA $62,640, 210w TradingView]","conditions":[{"condition":"below","value":90000}]}'Auth is read from ~/.config/mkt-watch/auth.json (apiUrl + token). There is no env-var override for the CLI's auth today, so a Hermes runner needs that file present — or use Pattern B with an explicit bearer token.
MIT licensed. No vendor dependency. This clones the repo to stand up your own always-on daemon (the whole backend) — distinct from installing the client, CLI, or plugin, which are all clone-free.
git clone https://github.com/dzianisv/mkt-alerts cd mkt-alerts bash deploy.sh # GCP e2-micro free tier + Cloudflare Tunnel
Deploys to a free GCP e2-micro VM behind Cloudflare Tunnel. No open ports.
There's a private, bearer-gated reference instance (Pine Script v5, OpenClaw agent-wake, one-command trial). It's not an open multi-tenant SaaS — ask for access, or stand up your own daemon in ~10 minutes.
Ask about accessClone and deploy in 10 minutes, or just try it first with npx. MIT license, full source on GitHub.