From alchemy-skills
Creates one-shot desktop price alerts for Solana tokens via launchd/cron. Checks every 5 minutes and disables itself after trigger. macOS and Linux notifications.
How this skill is triggered — by the user, by Claude, or both
Slash command
/alchemy-skills:moonpay-price-alertsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
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.
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.
mp binary on PATH: which mpjq installed: which jqosascript (built-in) or Linux: notify-send (sudo apt install libnotify-bin)"Tell me when SOL drops below $80" — checks every 5 minutes, fires once, then disables itself.
~/.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
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.
"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.
# macOS
launchctl list | grep moonpay
# Linux
crontab -l | grep moonpay
# 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 -
tail -50 ~/.config/moonpay/logs/alerts.log
mp token search are free — no gas costsmp token search --query "SOL" --chain solana to resolve token addresses~/.config/moonpay/logs/alerts.log — check this to verify they're runningbc -l handles decimal comparison; if unavailable, use awk "BEGIN {exit !($PRICE < $TARGET)}"npx claudepluginhub moonpay/skills --plugin moonpay-skillsCompose mp CLI commands with cron/launchd to run unattended trading strategies: DCA, limit orders, and stop losses.
Sets up alerts notifying when crypto prices cross upper or lower levels using Kraken ticker stream and CLI. Useful for monitoring trading breakouts or breakdowns.
Monitors Revolut X live prices and technical indicators (RSI, EMA crossover, MACD, Bollinger Bands, volume). Runs as a long-running background process with alert notifications.