#!/bin/bash
# Foundry MCP Server - Complete Uninstaller for Mac
# This removes ALL components for clean testing
echo "π§Ή Foundry MCP Server - Complete Uninstall"
echo "=========================================="
echo ""
echo "This will remove:"
echo " β’ MCP Server from /Applications"
echo " β’ Claude Desktop configuration"
echo " β’ ComfyUI (Python, dependencies, AI models) (~17GB)"
echo " β’ Foundry VTT module (if installed)"
echo " β’ AI-generated maps folder"
echo " β’ Lock files and debug logs"
echo ""
echo "β οΈ This action cannot be undone!"
echo ""
read -p "Continue? (y/N): " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Cancelled."
exit 0
fi
# Get user info
if [ "$EUID" -eq 0 ]; then
CURRENT_USER=$(stat -f '%Su' /dev/console)
USER_HOME=$(eval echo ~$CURRENT_USER)
else
CURRENT_USER=$USER
USER_HOME=$HOME
fi
echo ""
echo "Uninstalling for user: $CURRENT_USER"
echo ""
# 1. Kill all running processes
echo "π Stopping all running processes..."
# Kill MCP server backend
MCP_PIDS=$(pgrep -f "FoundryMCPServer.*backend.bundle.cjs" 2>/dev/null)
if [ -n "$MCP_PIDS" ]; then
echo " β’ Killing MCP server processes: $MCP_PIDS"
kill -9 $MCP_PIDS 2>/dev/null || sudo kill -9 $MCP_PIDS 2>/dev/null
fi
# Kill any ComfyUI Python processes (including hung ones)
COMFYUI_PIDS=$(pgrep -f "ComfyUI.*python" 2>/dev/null)
if [ -n "$COMFYUI_PIDS" ]; then
echo " β’ Killing ComfyUI processes: $COMFYUI_PIDS"
kill -9 $COMFYUI_PIDS 2>/dev/null || sudo kill -9 $COMFYUI_PIDS 2>/dev/null
fi
# Kill any Python processes from our installations (both old and new locations)
PYTHON_PIDS=$(ps aux | grep -E "(FoundryMCPServer.*python|python3.11.*FoundryMCP)" | grep -v grep | awk '{print $2}')
if [ -n "$PYTHON_PIDS" ]; then
echo " β’ Killing Python processes: $PYTHON_PIDS"
echo "$PYTHON_PIDS" | xargs kill -9 2>/dev/null || echo "$PYTHON_PIDS" | xargs sudo kill -9 2>/dev/null
fi
sleep 1
echo " β
Processes stopped"
echo ""
# 2. Remove MCP Server
if [ -d "/Applications/FoundryMCPServer.app" ]; then
echo "ποΈ Removing MCP Server..."
sudo rm -rf "/Applications/FoundryMCPServer.app"
echo " β
Removed"
else
echo " β MCP Server not found"
fi
# 3. Remove MCP Server application support directory
MCP_APP_SUPPORT="$USER_HOME/Library/Application Support/FoundryMCPServer"
if [ -d "$MCP_APP_SUPPORT" ]; then
echo "ποΈ Removing MCP Server app support data..."
rm -rf "$MCP_APP_SUPPORT"
echo " β
Removed"
else
echo " β MCP Server app support not found"
fi
# 4. Remove Claude Desktop configuration
CLAUDE_CONFIG="$USER_HOME/Library/Application Support/Claude/claude_desktop_config.json"
if [ -f "$CLAUDE_CONFIG" ]; then
echo "ποΈ Cleaning Claude Desktop config..."
# Check if our MCP server is in the config
if grep -q "foundry-vtt-mcp" "$CLAUDE_CONFIG" 2>/dev/null; then
# Backup first
cp "$CLAUDE_CONFIG" "$CLAUDE_CONFIG.backup"
# Use Node.js to safely remove the entry
node - <<'NODE_SCRIPT' "$CLAUDE_CONFIG"
const fs = require('fs');
const configPath = process.argv[2];
try {
const content = fs.readFileSync(configPath, 'utf8');
const config = JSON.parse(content);
if (config.mcpServers && config.mcpServers['foundry-vtt-mcp']) {
delete config.mcpServers['foundry-vtt-mcp'];
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
console.log(' β
Removed from config');
}
} catch (err) {
console.error(' β Failed:', err.message);
}
NODE_SCRIPT
echo " π Backup: $CLAUDE_CONFIG.backup"
else
echo " β Not found in config"
fi
else
echo " β Claude config not found"
fi
# 5. Remove ComfyUI Desktop (legacy)
if [ -d "/Applications/ComfyUI.app" ]; then
echo "ποΈ Removing ComfyUI Desktop app..."
sudo rm -rf "/Applications/ComfyUI.app"
echo " β
Removed"
else
echo " β ComfyUI Desktop not found"
fi
# 6. Remove headless ComfyUI from MCP Server bundle (old location from failed installs)
HEADLESS_COMFYUI="/Applications/FoundryMCPServer.app/Contents/Resources/ComfyUI"
if [ -d "$HEADLESS_COMFYUI" ]; then
echo "ποΈ Removing headless ComfyUI installation..."
sudo rm -rf "$HEADLESS_COMFYUI"
echo " β
Removed"
else
echo " β Headless ComfyUI not found"
fi
# 7. Remove old Python installations from failed attempts
OLD_PYTHON_LOCATIONS=(
"/Applications/FoundryMCPServer.app/Contents/Resources/python3.11"
"/Applications/FoundryMCPServer.app/Contents/Resources/Python.framework"
)
for OLD_PYTHON in "${OLD_PYTHON_LOCATIONS[@]}"; do
if [ -d "$OLD_PYTHON" ]; then
echo "ποΈ Removing old Python installation at $OLD_PYTHON..."
sudo rm -rf "$OLD_PYTHON"
echo " β
Removed"
fi
done
# 8. Remove Python 3.11 system installation (if installed by our installer)
PYTHON_SYSTEM="/Library/Frameworks/Python.framework/Versions/3.11"
if [ -d "$PYTHON_SYSTEM" ]; then
echo "ποΈ Removing Python 3.11 system installation..."
echo " (This was installed by the Foundry MCP installer)"
sudo rm -rf "$PYTHON_SYSTEM"
sudo rm -f "/usr/local/bin/python3.11"
echo " β
Removed"
else
echo " β Python 3.11 not found"
fi
# 9. Remove ComfyUI models and configuration from Application Support (~13.5GB)
COMFYUI_DATA="$USER_HOME/Library/Application Support/ComfyUI"
if [ -d "$COMFYUI_DATA" ]; then
echo "ποΈ Removing ComfyUI models and configuration (~13.5GB)..."
# Use sudo since models may be owned by root
sudo rm -rf "$COMFYUI_DATA"
echo " β
Removed"
else
echo " β ComfyUI data not found"
fi
# 10. Remove install log
if [ -f "$USER_HOME/foundry-mcp-install.log" ]; then
echo "ποΈ Removing install log..."
rm -f "$USER_HOME/foundry-mcp-install.log"
echo " β
Removed"
fi
# 11. Remove Foundry Module
FOUNDRY_PATHS=(
"$USER_HOME/Library/Application Support/FoundryVTT/Data/modules/foundry-mcp-bridge"
"$USER_HOME/FoundryVTT/Data/modules/foundry-mcp-bridge"
"/Applications/FoundryVTT/Data/modules/foundry-mcp-bridge"
)
FOUND_MODULE=false
for MODULE_PATH in "${FOUNDRY_PATHS[@]}"; do
if [ -d "$MODULE_PATH" ]; then
echo "ποΈ Removing Foundry module..."
rm -rf "$MODULE_PATH"
echo " β
Removed from $(dirname "$MODULE_PATH")"
FOUND_MODULE=true
break
fi
done
if [ "$FOUND_MODULE" = false ]; then
echo " β Foundry module not found"
fi
# 12. Remove AI-generated maps folder (NEW - Oct 10, 2025)
FOUNDRY_AI_MAPS_PATHS=(
"$USER_HOME/Library/Application Support/FoundryVTT/Data/ai-generated-maps"
"$USER_HOME/FoundryVTT/Data/ai-generated-maps"
"/Applications/FoundryVTT/Data/ai-generated-maps"
)
FOUND_MAPS=false
for MAPS_PATH in "${FOUNDRY_AI_MAPS_PATHS[@]}"; do
if [ -d "$MAPS_PATH" ]; then
echo "ποΈ Removing AI-generated maps..."
rm -rf "$MAPS_PATH"
echo " β
Removed from $(dirname "$MAPS_PATH")"
FOUND_MAPS=true
break
fi
done
if [ "$FOUND_MAPS" = false ]; then
echo " β AI-generated maps not found"
fi
# 13. Remove lock files and debug logs
echo "ποΈ Removing lock files and debug logs..."
TEMP_FILES=(
"/tmp/foundry-mcp-backend.lock"
"/tmp/backend.log"
"/tmp/process-mapgen-debug.log"
"/tmp/foundry-mcp-upload-debug.log"
)
REMOVED_COUNT=0
for TEMP_FILE in "${TEMP_FILES[@]}"; do
if [ -f "$TEMP_FILE" ]; then
rm -f "$TEMP_FILE"
((REMOVED_COUNT++))
fi
done
if [ $REMOVED_COUNT -gt 0 ]; then
echo " β
Removed $REMOVED_COUNT temp files"
else
echo " β No temp files found"
fi
# 14. Remove any MCP server logs from user directory
MCP_LOG_DIR="$USER_HOME/Library/Logs/foundry-mcp-server"
if [ -d "$MCP_LOG_DIR" ]; then
echo "ποΈ Removing MCP server logs..."
rm -rf "$MCP_LOG_DIR"
echo " β
Removed"
fi
# 15. Remove package receipts from system
echo "ποΈ Removing package receipts..."
PKG_IDS=(
"com.foundry-mcp.server.core"
"com.foundry-mcp.server.foundry-module"
"com.foundry-mcp.server.comfyui"
)
REMOVED_PKG_COUNT=0
for PKG_ID in "${PKG_IDS[@]}"; do
if pkgutil --pkg-info "$PKG_ID" &>/dev/null; then
echo " β’ Forgetting package: $PKG_ID"
sudo pkgutil --forget "$PKG_ID" &>/dev/null
((REMOVED_PKG_COUNT++))
fi
done
if [ $REMOVED_PKG_COUNT -gt 0 ]; then
echo " β
Removed $REMOVED_PKG_COUNT package receipts"
else
echo " β No package receipts found"
fi
echo ""
echo "ββββββββββββββββββββββββββββββββββββββββ"
echo "β
Uninstall Complete!"
echo "ββββββββββββββββββββββββββββββββββββββββ"
echo ""
echo "Foundry MCP Bridge and all of its components have been uninstalled."
echo ""
echo "Summary:"
echo " β
MCP Server removed"
echo " β
ComfyUI and models removed (~17GB freed)"
echo " β
Python 3.11 removed"
echo " β
Foundry module removed"
echo " β
AI-generated maps removed"
echo " β
Lock files and logs removed"
echo " β
Claude Desktop config cleaned"
echo " β
Package receipts removed"
echo ""
echo "System is now in a clean state for reinstallation."
echo ""