From alchemy-skills
Sets up bash scripts for desktop price alerts on crypto tokens using MoonPay CLI, with cron/launchd scheduling and OS notifications for threshold crosses.
npx claudepluginhub moonpay/skills --plugin alchemy-skillsThis skill uses the workspace's default tool permissions.
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.
Generates shell scripts for automated crypto trading strategies (DCA, limit orders, stop losses) using mp CLI commands and cron/launchd scheduling.
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.
Tracks cryptocurrency prices, sets price/percentage alerts, searches coins via CoinGecko API using Python CLI scripts with cron support.
Share bugs, ideas, or general feedback.
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)}"