Open Source · MITStocks + CryptoSelf-Hostable

Price alerts and Pine Script signals for AI agents

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.

terminal
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.
mkt-alerts one-command trial: npx github:dzianisv/mkt-alerts try fires a live BTC-USD alert
One command — no signup — fires a live alert in seconds.

MIT licensed · Self-host or request access · The full CLI ships via npx -y github:dzianisv/mkt-alerts today (@vibetechnologies/mkt-alerts on npm)

Three ways in, same alerts underneath

Read prices and alerts from your agent, manage alerts from your terminal or backend.

MCP Server (read/write)

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.

HTTP API

Private, bearer-authenticated REST. GET /quotes, GET /alerts, POST /alerts, DELETE /alerts/:id. Works from any language.

CLI

npx -y github:dzianisv/mkt-alerts try — no install. Set alerts from your terminal or agent scripts, with a mandatory data-source evidence gate.

Integration paths

How it works

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"] } }
# }

Alert conditions

Agents and humans can subscribe to any of these conditions via the API or CLI.

ConditionTypeExample
above / belowPriceBTC-USD below 90000
pct_up / pct_down% moveAAPL pct_down 5%
rsi_above / rsi_belowRSIETH-USD rsi_below 30
sma_cross_above / sma_cross_belowSMA crossSOL-USD sma_cross_above
macd_crossMACDBTC-USD macd_cross
pinePine Script v5custom 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.

New · Custom Indicators

Pine Script v5 alerts

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
# 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").

New · OpenClaw Plugin

Your agent wakes up when the market hits your level

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.

terminal
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.
No GCP, no API keys

Public, key-free price feeds — Coinbase for crypto, Yahoo Finance for stocks.

Zero runtime deps

Node built-ins only — fetch, fs, path. Nothing else to install or trust.

MIT licensed

Read the plugin source, fork it, or vendor it — no lock-in.

Read the OpenClaw plugin docs
Scheduling

Schedule alerts with Hermes (or any cron)

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 · CLI
# 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 · HTTP API
# 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.

Self-hosted

Self-host the daemon in 10 minutes

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.

Ready to give your agents market alerts?

Request access to a hosted instance

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 access

Self-hosted

Clone and deploy in 10 minutes, or just try it first with npx. MIT license, full source on GitHub.

View on GitHub