MCP Servers: AI Automation Guide

Model Context Protocol is an open standard from Anthropic that defines how LLMs connect to external tools and data. One protocol - many sources. Architecture: ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ LLM Client │ ←→ │ MCP Server │ ←→ │ Resource │ │ (Cursor, │ stdio/ │ (filesystem,│ │ (files, DB,│ │ Claude, │ HTTP │ github...) │ │ API...) │ │ OpenWebUI) │ │ │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ Client - app with LLM (Cursor, Claude Desktop, Open WebUI) Server - wrapper around a resource (Node.js/Python process) Resource - data source or action (DB, API, filesystem) 💡 MCP defines a standard way to connect the model to external tools. The model doesn’t become “smarter” - it gains access to data and actions. ...

16 Sep 2026 · 4 min · 806 words · Potato Energy Team, ponfertato

Ventoy: Multi-Boot USB with Correct Structure

Instead of reformatting the USB for each new image, Ventoy allows copying ISO files as regular files. At boot, a menu appears with all available images. Benefits: ✅ No need to rewrite USB for each image ✅ Support for Windows, Linux, utilities - all on one drive ✅ Regular files accessible from any OS ✅ Flexible configuration via JSON 🗂 Correct USB Structure [First USB partition - exFAT/NTFS] ├── /ventoy/ # ← Must be here! │ ├── ventoy.json # Main config │ ├── revi/ # Windows auto-install │ │ └── autounattend.xml │ └── theme/ # Custom theme │ └── distro/theme.txt │ ├── BACKUP/ # Working files ├── LINUX/ # Linux ISOs │ ├── Archlinux 2025.12.01.iso │ ├── Debian 13.2.0.iso │ └── NixOS 25.11.1734.iso ├── WINDOWS/ # Windows ISOs │ ├── Windows 10 22H2.iso │ ├── Windows 10 Enterprise LTSC 2021.iso │ └── Windows 11 25H2.iso ├── ReviSetup/ # Post-install scripts │ └── setup.cmd └── UTILS/ # Utilities ├── gparted-live.iso └── memtest86+.iso ⚠️ Critical: /ventoy/ must be on the first partition (where ISOs are), NOT in root! ...

06 May 2026 · 3 min · 594 words · Potato Energy Team, ponfertato

GitHub CLI: Bulk Delete Old Issues

Long-running projects accumulate outdated issues: bugs for old versions, irrelevant features, test tickets. Manual deletion takes significant time. The script automatically finds and deletes (or marks) old issues by specified labels. 💡 Script uses dry-run by default - shows what would be deleted without actual deletion. 📦 Script: delete-issues.sh Full code #!/bin/bash # Delete old GitHub Issues by labels and date # Usage: ./delete-issues.sh [--execute] set -euo pipefail # === CONFIG === REPO="owner/repo" # Repository in owner/repo format LABELS='label1,label2,label3' # Labels to filter (comma-separated) CUTOFF="2025-12-31T23:59:59Z" # Delete issues created BEFORE this date DRY_RUN=true # true = preview only, false = actually delete # Parse arguments if [[ "${1:-}" == "--execute" ]]; then DRY_RUN=false echo "⚠️ Mode: ACTUAL DELETION" else echo "ℹ️ Mode: DRY RUN (nothing will be deleted)" fi echo "🔍 Searching issues in $REPO with labels: $LABELS, created before $CUTOFF" echo "---" # Fetch and filter issues gh issue list --repo "$REPO" --state all --limit 1000 \ --json number,title,createdAt,labels,url | \ jq -r --arg labels "$LABELS" --arg cutoff "$CUTOFF" ' ($labels | split(",")) as $label_array | .[] | select(.createdAt < $cutoff) | select(.labels | map(.name) | any(. as $l | $label_array | index($l))) | "\(.number)|\(.title)|\(.url)" ' | \ while IFS='|' read -r number title url; do if [[ "$DRY_RUN" == "true" ]]; then echo "[DRY RUN] ##$number - $title" echo " $url" else echo "🗑 Deleting ##$number - $title" gh issue delete "$REPO" "$number" --yes sleep 1 # Small pause to avoid rate limits fi done echo "---" echo "✅ Done" Install dependencies # GitHub CLI # Windows (winget): winget install GitHub.cli # Linux (Ubuntu/Debian): sudo apt install gh # macOS (Homebrew): brew install gh # Authenticate gh auth login # jq (JSON processor) # Windows (winget): winget install jq.jq # Linux: sudo apt install jq # macOS: brew install jq Run # Make script executable chmod +x delete-issues.sh # DRY RUN (safe mode - preview only) ./delete-issues.sh # ACTUAL DELETION (add --execute flag) ./delete-issues.sh --execute 🔍 How it works Step-by-step breakdown Step Command What it does 1 gh issue list --json ... Fetches issues as JSON with fields: number, title, date, labels, URL 2 jq -r ... Filters: date < cutoff AND has at least one of specified labels 3 while read ... Processes each matching issue 4 gh issue delete Deletes issue (only if DRY_RUN=false) jq filter logic ($labels | split(",")) as $label_array | # Split label string into array .[] | # For each issue select(.createdAt < $cutoff) | # Only if created before cutoff select( .labels | map(.name) | # Get list of label names any(. as $l | $label_array | index($l)) # Check if any matches our labels ) | "\(.number)|\(.title)|\(.url)" # Format output Rationale: ...

17 Mar 2026 · 4 min · 819 words · Potato Energy Team, ponfertato

Docker: Scheduled Automatic Shutdown

For home servers and test environments, resource saving is important: containers can be stopped and the system powered off during nights or off-hours. This guide describes a safe method with state preservation and automatic recovery. 💡 Method suits OrangePI, Raspberry Pi, old PCs, and any systems where power efficiency matters. 📦 Container shutdown script Create script # File: /usr/local/bin/stop_containers_and_shutdown.sh cat > /usr/local/bin/stop_containers_and_shutdown.sh << 'EOF' #!/bin/bash # # Script saves running container IDs, # stops them, and initiates system shutdown. # CONTAINERS_FILE="/etc/active_containers.txt" echo "=== $(date '+%Y-%m-%d %H:%M:%S') ===" echo "Starting container shutdown and system power-off script" # Get list of running containers (by ID) RUNNING_CONTAINERS=$(docker ps -q) if [ -n "${RUNNING_CONTAINERS}" ]; then echo "Saving running containers to ${CONTAINERS_FILE}" echo "${RUNNING_CONTAINERS}" > "${CONTAINERS_FILE}" docker stop ${RUNNING_CONTAINERS} echo "Containers stopped." else echo "No running containers." [ -f "${CONTAINERS_FILE}" ] && rm -f "${CONTAINERS_FILE}" fi sleep 10 echo "Shutting down system." /sbin/shutdown -h now EOF Make executable chmod +x /usr/local/bin/stop_containers_and_shutdown.sh How it works Step Description docker ps -q Gets IDs of all running containers > /etc/active_containers.txt Saves list for recovery docker stop Gracefully stops containers (SIGTERM) sleep 10 Allows time for operations to complete shutdown -h now Powers off the system Rationale: ...

17 Mar 2026 · 4 min · 813 words · Potato Energy Team, ponfertato