homeassistant-mcp
by tevonsb
#!/bin/bash
# macos-setup.sh
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'
echo -e "${BLUE}Setting up MCP Integration for Claude Desktop${NC}"
# Function to compare version numbers
version_greater_equal() {
printf '%s\n' "$2" "$1" | sort -V -C
}
# Check if Homebrew is installed
if ! command -v brew &> /dev/null; then
echo -e "${RED}Homebrew is not installed. Installing Homebrew...${NC}"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
# Check if Node.js is installed
if ! command -v node &> /dev/null; then
echo -e "${RED}Node.js is not installed. Installing via Homebrew...${NC}"
brew install node@20
brew link node@20
else
NODE_VERSION=$(node -v)
if ! version_greater_equal "${NODE_VERSION//v/}" "20.10.0"; then
echo -e "${RED}Node.js version must be 20.10.0 or higher. Current version: $NODE_VERSION${NC}"
echo -e "${BLUE}Installing Node.js 20 via Homebrew...${NC}"
brew install node@20
brew link node@20
fi
fi
# Check if npm is installed
if ! command -v npm &> /dev/null; then
echo -e "${RED}npm is not installed. Please install npm and try again.${NC}"
exit 1
fi
# Check if jq is installed
if ! command -v jq &> /dev/null; then
echo -e "${RED}jq is not installed. Installing via Homebrew...${NC}"
brew install jq
fi
# Create MCP directory if it doesn't exist
MCP_DIR="$HOME/.mcp"
mkdir -p "$MCP_DIR"
# Clone the Home Assistant MCP repository
echo -e "${BLUE}Cloning Home Assistant MCP repository...${NC}"
git clone https://github.com/jango-blockchained/homeassistant-mcp.git "$MCP_DIR/homeassistant-mcp"
cd "$MCP_DIR/homeassistant-mcp"
# Install dependencies and build
echo -e "${BLUE}Installing dependencies and building...${NC}"
npm install
npm run build
# Create Claude Desktop config directory (macOS specific path)
CLAUDE_CONFIG_DIR="$HOME/Library/Application Support/Claude"
mkdir -p "$CLAUDE_CONFIG_DIR"
# Prompt for configurations
echo -e "${BLUE}Please enter your configurations:${NC}"
read -p "Home Assistant URL (e.g., http://homeassistant.local:8123): " HASS_HOST
read -p "Home Assistant Long-lived access token: " HASS_TOKEN
# Create .env file for Home Assistant
cat > "$MCP_DIR/homeassistant-mcp/.env" << EOL
NODE_ENV=production
HASS_HOST=$HASS_HOST
HASS_TOKEN=$HASS_TOKEN
PORT=3000
EOL
# Create base configuration for Home Assistant
CONFIG_JSON='{
"mcpServers": {
"homeassistant": {
"command": "node",
"args": [
"'$MCP_DIR'/homeassistant-mcp/dist/index.js"
],
"env": {
"HASS_TOKEN": "'$HASS_TOKEN'",
"HASS_HOST": "'$HASS_HOST'",
"NODE_ENV": "production",
"PORT": "3000"
}
}
}
}'
# Prompt for enabling Brave Search
read -p "Do you want to enable Brave Search integration? (y/n): " ENABLE_BRAVE_SEARCH
if [[ $ENABLE_BRAVE_SEARCH =~ ^[Yy]$ ]]; then
# Install Brave Search MCP globally only if enabled
echo -e "${BLUE}Installing Brave Search MCP...${NC}"
npm install -g @modelcontextprotocol/server-brave-search
read -p "Brave Search API Key: " BRAVE_API_KEY
# Add Brave Search to the configuration
CONFIG_JSON=$(echo $CONFIG_JSON | jq '.mcpServers += {
"brave-search": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-brave-search"],
"env": {
"BRAVE_API_KEY": "'$BRAVE_API_KEY'"
}
}
}')
fi
# Write the final configuration to file
echo $CONFIG_JSON | jq '.' > "$CLAUDE_CONFIG_DIR/claude_desktop_config.json"
# Set proper permissions
chmod 600 "$CLAUDE_CONFIG_DIR/claude_desktop_config.json"
chmod 600 "$MCP_DIR/homeassistant-mcp/.env"
echo -e "${GREEN}Installation complete!${NC}"
echo -e "${BLUE}Configuration files created at:${NC}"
echo " - $CLAUDE_CONFIG_DIR/claude_desktop_config.json"
echo " - $MCP_DIR/homeassistant-mcp/.env"
echo -e "${BLUE}To use the integration:${NC}"
echo "1. Make sure Claude Desktop is installed from https://claude.ai/download"
echo "2. Restart Claude Desktop"
echo "3. Home Assistant MCP integration is now available"
if [[ $ENABLE_BRAVE_SEARCH =~ ^[Yy]$ ]]; then
echo "4. Brave Search MCP integration is also available"
fi
echo -e "${RED}Note: Keep your access tokens and API keys secure and never share them with others${NC}"
# Optional: Test the installations
read -p "Would you like to test the installations? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo -e "${BLUE}Testing Home Assistant MCP connection...${NC}"
node "$MCP_DIR/homeassistant-mcp/dist/index.js" test
if [[ $ENABLE_BRAVE_SEARCH =~ ^[Yy]$ ]]; then
echo -e "${BLUE}Testing Brave Search MCP...${NC}"
npx @modelcontextprotocol/server-brave-search test
fi
fi