Skip to content
Business
Skill

/moonpay-price-alerts

Set up desktop price alerts that notify you when tokens hit target prices. Observe-only — no trading, just notifications.

BOOST
From plugin
moonpay-skills
11142 skills
Install
$ npx -y skills add moonpay/skills --skill moonpay-price-alerts --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/moonpay-price-alerts

Context preview

The summary Claude sees to decide when to auto-load this skill.

Set up desktop price alerts that notify you when tokens hit target prices. Observe-only — no trading, just notifications.

SKILL.md

moonpay-price-alerts.SKILL.md
name: moonpay-price-alerts
description: Set up desktop price alerts that notify you when tokens hit target prices. Observe-only — no trading, just notifications.
tags: [alerts, research]

Price alerts

Goal

Monitor token prices and get desktop notifications when they cross a threshold. Uses `mp token search` for price checks and OS notifications (`osascript`/`notify-send`) for alerts. Observe-only — no funds at risk.

Prerequisites

  • `mp` binary on PATH: `which mp`
  • `jq` installed: `which jq`
  • macOS: `osascript` (built-in) or Linux: `notify-send` (`sudo apt install libnotify-bin`)

One-shot alert

"Tell me when SOL drops below $80" — checks every 5 minutes, fires once, then disables itself.

Script: `~/.config/moonpay/scripts/alert-sol-below-80.sh`

#!/bin/bash
set -euo pipefail

MP="$(which mp)"
LOG="$HOME/.config/moonpay/logs/alerts.log"
mkdir -p "$(dirname "$LOG")"
log() { echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] $*" >> "$LOG"; }

# --- Config ---
TOKEN="So11111111111111111111111111111111111111111"
CHAIN="solana"
SYMBOL="SOL"
TARGET=80
DIRECTION="below"  # "above" or "below"
SCRIPT_NAME="alert-sol-below-80"

# --- Check price ---
PRICE=$("$MP" --json token search --query "$SYMBOL" --chain "$CHAIN" | jq -r '.items[0].marketData.price')

if [ -z "$PRICE" ] || [ "$PRICE" = "null" ]; then
  log "ALERT $SCRIPT_NAME: price fetch failed, skipping"
  exit 0
fi

# --- Compare ---
TRIGGERED=false
if [ "$DIRECTION" = "below" ] && (( $(echo "$PRICE < $TARGET" | bc -l) )); then
  TRIGGERED=true
elif [ "$DIRECTION" = "above" ] && (( $(echo "$PRICE > $TARGET" | bc -l) )); then
  TRIGGERED=true
fi

if [ "$TRIGGERED" = true ]; then
  MSG="$SYMBOL is $DIRECTION \$$TARGET — currently \$$PRICE"
  log "ALERT $SCRIPT_NAME: $MSG"

  # Desktop notification
  if [[ "$OSTYPE" == "darwin"* ]]; then
    osascript -e "display notification \"$MSG\" with title \"MoonPay Alert\" sound name \"Glass\""
  else
    notify-send "MoonPay Alert" "$MSG"
  fi

  # Self-disable (one-shot)
  if [[ "$OSTYPE" == "darwin"* ]]; then
    launchctl unload "$HOME/Library/LaunchAgents/com.moonpay.${SCRIPT_NAME}.plist" 2>/dev/null || true
  else
    crontab -l | grep -v "$SCRIPT_NAME" | crontab -
  fi
  log "ALERT $SCRIPT_NAME: disabled after trigger"
else
  log "ALERT $SCRIPT_NAME: $SYMBOL at \$$PRICE — not triggered ($DIRECTION $TARGET)"
fi

Schedule

Check every 5 minutes:

# cron (Linux)
*/5 * * * * ~/.config/moonpay/scripts/alert-sol-below-80.sh # moonpay:alert-sol-below-80

# launchd (macOS) — use StartInterval of 300 seconds in the plist

Launchd plist at `~/Library/LaunchAgents/com.moonpay.alert-sol-below-80.plist`:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.moonpay.alert-sol-below-80</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/bash</string>
    <string>/Users/USERNAME/.config/moonpay/scripts/alert-sol-below-80.sh</string>
  </array>
  <key>StartInterval</key>
  <integer>300</integer>
  <key>StandardErrorPath</key>
  <string>/Users/USERNAME/.config/moonpay/logs/alert-sol-below-80.err</string>
</dict>
</plist>

Load: `launchctl load ~/Library/LaunchAgents/com.moonpay.alert-sol-below-80.plist`

**Important:** Replace `USERNAME` with the actual username. Tilde does not expand in plist files.

Recurring alert

"Alert me every hour while ETH is above $2000" — keeps firing on each check, doesn't self-disable.

Same script as above but remove the self-disable block. The alert fires every time the condition is met, until the user manually removes it.

Managing alerts

List active alerts

# macOS
launchctl list | grep moonpay

# Linux
crontab -l | grep moonpay

Remove an alert

# macOS
launchctl unload ~/Library/LaunchAgents/com.moonpay.alert-sol-below-80.plist
rm ~/Library/LaunchAgents/com.moonpay.alert-sol-below-80.plist

# Linux
crontab -l | grep -v "alert-sol-below-80" | crontab -

View alert history

tail -50 ~/.config/moonpay/logs/alerts.log

Tips

  • Price checks via `mp token search` are free — no gas costs
  • 5-minute intervals are reasonable; don't go below 1 minute
  • Use `mp token search --query "SOL" --chain solana` to resolve token addresses
  • Alerts log to `~/.config/moonpay/logs/alerts.log` — check this to verify they're running
  • The machine must be logged in for notifications and keychain access to work
  • `bc -l` handles decimal comparison; if unavailable, use `awk "BEGIN {exit !($PRICE < $TARGET)}"`
  • This skill is observe-only — for automated buying/selling, see **moonpay-trading-automation**

Related skills

  • **moonpay-trading-automation** — Automated trading (DCA, limit orders, stop losses)
  • **moonpay-discover-tokens** — Research tokens and get current prices
  • **moonpay-check-wallet** — Check portfolio before setting alerts
Read more
Ships withmoonpay-skills

Agent Skills for crypto infrastructure — wallet management, token trading, cross-chain bridges, fiat on/off ramp, prediction markets, and more. Skills are instructional folders that AI agents load dynamically to perform specialized tasks.

Get the whole plugin

Other skills on moonpay-skills.