#!/bin/bash
# Claude Desktop 自动配置脚本
# 适用于 macOS 和 Linux
set -e
echo "🚀 MySQL MCP Server - Claude Desktop 配置向导"
# 检查 Node.js
if ! command -v node &> /dev/null; then
echo "❌ 错误: 未找到 Node.js,请先安装 Node.js"
echo "📥 下载地址: https://nodejs.org/"
exit 1
fi
# 获取项目路径
PROJECT_PATH=$(pwd)
DIST_PATH="$PROJECT_PATH/dist/index.js"
echo "📂 项目路径: $PROJECT_PATH"
echo "📦 构建文件: $DIST_PATH"
# 检查构建文件是否存在
if [ ! -f "$DIST_PATH" ]; then
echo "🔨 构建项目..."
npm run build
fi
# 获取操作系统
OS="$(uname -s)"
case "$OS" in
Darwin*) CONFIG_DIR="$HOME/Library/Application Support/Claude";;
Linux*) CONFIG_DIR="$HOME/.config/Claude";;
*) echo "❌ 不支持的操作系统: $OS"; exit 1;;
esac
CONFIG_FILE="$CONFIG_DIR/claude_desktop_config.json"
echo "📁 配置目录: $CONFIG_DIR"
echo "📄 配置文件: $CONFIG_FILE"
# 创建配置目录
mkdir -p "$CONFIG_DIR"
# 获取数据库配置
echo ""
echo "📊 请输入数据库连接信息:"
read -p "MySQL 主机 (默认: localhost): " MYSQL_HOST
MYSQL_HOST=${MYSQL_HOST:-localhost}
read -p "MySQL 端口 (默认: 3306): " MYSQL_PORT
MYSQL_PORT=${MYSQL_PORT:-3306}
read -p "MySQL 用户名: " MYSQL_USER
if [ -z "$MYSQL_USER" ]; then
echo "❌ 用户名不能为空"
exit 1
fi
read -s -p "MySQL 密码: " MYSQL_PASSWORD
echo
if [ -z "$MYSQL_PASSWORD" ]; then
echo "❌ 密码不能为空"
exit 1
fi
read -p "数据库名称 (可选): " MYSQL_DATABASE
# 创建配置
if [ -f "$CONFIG_FILE" ]; then
echo "📋 备份现有配置文件..."
cp "$CONFIG_FILE" "$CONFIG_FILE.backup.$(date +%Y%m%d_%H%M%S)"
fi
# 创建新的配置
echo "🔧 创建 Claude Desktop 配置..."
# 使用 jq 创建 JSON,或使用 Python 作为后备
if command -v jq &> /dev/null; then
# 使用 jq
if [ -f "$CONFIG_FILE" ]; then
CONFIG_JSON=$(cat "$CONFIG_FILE")
else
CONFIG_JSON='{"mcpServers": {}}'
fi
NEW_CONFIG=$(echo "$CONFIG_JSON" | jq --arg host "$MYSQL_HOST" \
--arg port "$MYSQL_PORT" \
--arg user "$MYSQL_USER" \
--arg pass "$MYSQL_PASSWORD" \
--arg db "$MYSQL_DATABASE" \
--arg path "$DIST_PATH" \
'.mcpServers["mysql-readonly"] = {
"command": "node",
"args": [$path],
"env": {
"MYSQL_HOST": $host,
"MYSQL_PORT": $port,
"MYSQL_USER": $user,
"MYSQL_PASSWORD": $pass,
"MYSQL_DATABASE": $db
}
}')
echo "$NEW_CONFIG" > "$CONFIG_FILE"
else
# 使用 Python
python3 -c "
import json
import os
config_path = '$CONFIG_FILE'
dist_path = '$DIST_PATH'
config = {'mcpServers': {}}
if os.path.exists(config_path):
with open(config_path, 'r') as f:
config = json.load(f)
config['mcpServers']['mysql-readonly'] = {
'command': 'node',
'args': [dist_path],
'env': {
'MYSQL_HOST': '$MYSQL_HOST',
'MYSQL_PORT': '$MYSQL_PORT',
'MYSQL_USER': '$MYSQL_USER',
'MYSQL_PASSWORD': '$MYSQL_PASSWORD',
'MYSQL_DATABASE': '$MYSQL_DATABASE'
}
}
with open(config_path, 'w') as f:
json.dump(config, f, indent=2)
"
fi
echo ""
echo "✅ 配置完成!"
echo ""
echo "📋 配置摘要:"
echo " - 配置文件: $CONFIG_FILE"
echo " - 数据库主机: $MYSQL_HOST:$MYSQL_PORT"
echo " - 用户名: $MYSQL_USER"
echo " - 数据库: ${MYSQL_DATABASE:-未指定}"
echo ""
echo "🔄 请重启 Claude Desktop 以加载新的配置"
echo ""
echo "🧪 测试方法:"
echo " 1. 重启 Claude Desktop"
echo " 2. 在对话中询问: '列出数据库中的所有表'"
echo ""
echo "🔍 如有问题,请检查 Claude Desktop 的日志文件"