Skip to content

脚本工具

Claude Code 提供了一系列实用脚本,用于系统配置、环境设置和维护管理。

📜 脚本概览

脚本功能用途频率
setup-mcp.shMCP 服务配置初始化和配置 MCP 服务器一次性/更新时
setup-dev-mcp.sh开发环境配置配置开发模式的 MCP 服务开发阶段
backup-config.sh配置备份备份和恢复系统配置定期/变更前

setup-mcp.sh

功能说明

MCP 服务设置脚本,用于安装和配置 Model Context Protocol 服务器。

bash
#!/bin/bash
# MCP 服务器设置脚本

# 检查依赖
check_dependencies() {
    echo "检查系统依赖..."
    
    # 检查 Node.js
    if ! command -v node &> /dev/null; then
        echo " Node.js 未安装,请先安装 Node.js 16+"
        exit 1
    fi
    
    # 检查 Python
    if ! command -v python3 &> /dev/null; then
        echo " Python3 未安装,请先安装 Python 3.8+"
        exit 1
    fi
    
    echo " 依赖检查通过"
}

# 安装 MCP 服务器
install_mcp_servers() {
    echo "安装 MCP 服务器..."
    
    # Context7 服务器
    if [ ! -d "$HOME/.mcp/context7" ]; then
        echo "安装 Context7 服务器..."
        mkdir -p $HOME/.mcp/context7
        npm install -g @context7/mcp-server
        echo " Context7 服务器安装完成"
    fi
    
    # Sequential 服务器
    if [ ! -d "$HOME/.mcp/sequential" ]; then
        echo "安装 Sequential 服务器..."
        mkdir -p $HOME/.mcp/sequential
        pip3 install sequential-mcp-server
        echo " Sequential 服务器安装完成"
    fi
    
    # Magic 服务器
    if [ ! -d "$HOME/.mcp/magic" ]; then
        echo "安装 Magic 服务器..."
        mkdir -p $HOME/.mcp/magic
        git clone https://github.com/magic-tools/mcp-server.git $HOME/.mcp/magic
        cd $HOME/.mcp/magic && npm install
        echo " Magic 服务器安装完成"
    fi
    
    # Playwright 服务器
    if [ ! -d "$HOME/.mcp/playwright" ]; then
        echo "安装 Playwright 服务器..."
        mkdir -p $HOME/.mcp/playwright
        npm install -g @playwright/mcp-server
        npx playwright install
        echo " Playwright 服务器安装完成"
    fi
}

# 配置服务器
configure_mcp_servers() {
    echo "配置 MCP 服务器..."
    
    # 创建配置目录
    mkdir -p $HOME/.claude/mcp
    
    # Context7 配置
    cat > $HOME/.claude/mcp/context7.json << EOF
{
  "server": {
    "command": "context7-mcp-server",
    "args": ["--port", "3001"],
    "env": {
      "CONTEXT7_API_KEY": "\${CONTEXT7_API_KEY}",
      "CONTEXT7_CACHE_DIR": "\$HOME/.cache/context7"
    }
  },
  "settings": {
    "auto_activate": true,
    "cache_duration": 3600,
    "max_concurrent": 5
  }
}
EOF
    
    # Sequential 配置
    cat > $HOME/.claude/mcp/sequential.json << EOF
{
  "server": {
    "command": "python3",
    "args": ["-m", "sequential_mcp_server", "--port", "3002"],
    "env": {
      "SEQUENTIAL_LOG_LEVEL": "INFO",
      "SEQUENTIAL_MAX_DEPTH": "5"
    }
  },
  "settings": {
    "complexity_threshold": 0.7,
    "thinking_timeout": 120,
    "max_analysis_depth": 5
  }
}
EOF
    
    # Magic 配置
    cat > $HOME/.claude/mcp/magic.json << EOF
{
  "server": {
    "command": "node",
    "args": ["\$HOME/.mcp/magic/server.js", "--port", "3003"],
    "env": {
      "MAGIC_TOOLS_PATH": "\$HOME/.mcp/magic/tools",
      "MAGIC_LOG_LEVEL": "INFO"
    }
  },
  "settings": {
    "enabled": false,
    "require_confirmation": true,
    "allowed_tools": ["git", "npm", "docker", "kubectl"]
  }
}
EOF
    
    # Playwright 配置
    cat > $HOME/.claude/mcp/playwright.json << EOF
{
  "server": {
    "command": "playwright-mcp-server",
    "args": ["--port", "3004"],
    "env": {
      "PLAYWRIGHT_BROWSERS_PATH": "\$HOME/.cache/ms-playwright",
      "PLAYWRIGHT_HEADLESS": "true"
    }
  },
  "settings": {
    "headless": true,
    "browsers": ["chromium", "firefox", "webkit"],
    "timeout": 30000,
    "viewport": {"width": 1280, "height": 720}
  }
}
EOF
    
    echo " MCP 服务器配置完成"
}

# 启动服务器
start_mcp_servers() {
    echo "启动 MCP 服务器..."
    
    # 创建服务管理脚本
    cat > $HOME/.claude/mcp/start-servers.sh << 'EOF'
#!/bin/bash

# 启动 Context7
echo "启动 Context7 服务器..."
nohup context7-mcp-server --port 3001 > /tmp/context7-mcp.log 2>&1 &
echo $! > /tmp/context7-mcp.pid

# 启动 Sequential
echo "启动 Sequential 服务器..."
nohup python3 -m sequential_mcp_server --port 3002 > /tmp/sequential-mcp.log 2>&1 &
echo $! > /tmp/sequential-mcp.pid

# 启动 Playwright
echo "启动 Playwright 服务器..."
nohup playwright-mcp-server --port 3004 > /tmp/playwright-mcp.log 2>&1 &
echo $! > /tmp/playwright-mcp.pid

echo " MCP 服务器启动完成"
echo "Context7: http://localhost:3001"
echo "Sequential: http://localhost:3002" 
echo "Playwright: http://localhost:3004"
EOF
    
    chmod +x $HOME/.claude/mcp/start-servers.sh
    
    # 创建停止脚本
    cat > $HOME/.claude/mcp/stop-servers.sh << 'EOF'
#!/bin/bash

echo "停止 MCP 服务器..."

# 停止所有服务
for service in context7 sequential playwright; do
    if [ -f "/tmp/${service}-mcp.pid" ]; then
        pid=$(cat /tmp/${service}-mcp.pid)
        if kill -0 $pid 2>/dev/null; then
            kill $pid
            echo " ${service} 服务器已停止"
        fi
        rm -f /tmp/${service}-mcp.pid
    fi
done

echo " 所有 MCP 服务器已停止"
EOF
    
    chmod +x $HOME/.claude/mcp/stop-servers.sh
    
    # 启动服务器
    $HOME/.claude/mcp/start-servers.sh
}

# 验证安装
verify_installation() {
    echo "验证 MCP 服务器安装..."
    
    sleep 5  # 等待服务器启动
    
    # 检查服务器状态
    for port in 3001 3002 3004; do
        if curl -s "http://localhost:$port/health" > /dev/null; then
            echo " 端口 $port 服务器运行正常"
        else
            echo "  端口 $port 服务器可能未正常启动"
        fi
    done
    
    echo " MCP 服务器验证完成"
}

# 主函数
main() {
    echo " Claude Code MCP 服务器设置"
    echo "==============================="
    
    check_dependencies
    install_mcp_servers
    configure_mcp_servers
    start_mcp_servers
    verify_installation
    
    echo ""
    echo " MCP 服务器设置完成!"
    echo ""
    echo "管理命令:"
    echo "  启动服务: ~/.claude/mcp/start-servers.sh"
    echo "  停止服务: ~/.claude/mcp/stop-servers.sh"
    echo "  查看日志: tail -f /tmp/*-mcp.log"
    echo ""
    echo "服务地址:"
    echo "  Context7:  http://localhost:3001"
    echo "  Sequential: http://localhost:3002"
    echo "  Playwright: http://localhost:3004"
}

# 执行主函数
main "$@"

使用方法

bash
# 运行安装脚本
chmod +x setup-mcp.sh
./setup-mcp.sh

# 验证安装
claude --mcp-status

# 测试服务
claude --mcp=context7 "测试 Context7 服务"

setup-dev-mcp.sh

功能说明

开发环境专用的 MCP 配置脚本,提供开发者友好的配置选项。

bash
#!/bin/bash
# 开发环境 MCP 设置脚本

setup_dev_environment() {
    echo "设置开发环境..."
    
    # 创建开发配置
    mkdir -p $HOME/.claude/mcp/dev
    
    # 开发模式 Context7 配置
    cat > $HOME/.claude/mcp/dev/context7.json << EOF
{
  "server": {
    "command": "node",
    "args": ["\$HOME/dev/context7-mcp/server.js", "--dev", "--port", "3101"],
    "env": {
      "NODE_ENV": "development",
      "DEBUG": "context7:*",
      "CONTEXT7_DEV_MODE": "true"
    }
  },
  "settings": {
    "auto_activate": true,
    "cache_duration": 300,
    "reload_on_change": true,
    "debug_logging": true
  }
}
EOF
    
    # 开发模式 Sequential 配置
    cat > $HOME/.claude/mcp/dev/sequential.json << EOF
{
  "server": {
    "command": "python3",
    "args": ["-m", "sequential_mcp_server", "--dev", "--port", "3102"],
    "env": {
      "PYTHONPATH": "\$HOME/dev/sequential-mcp",
      "SEQUENTIAL_LOG_LEVEL": "DEBUG",
      "SEQUENTIAL_DEV_MODE": "true"
    }
  },
  "settings": {
    "complexity_threshold": 0.5,
    "thinking_timeout": 60,
    "debug_mode": true,
    "reload_on_change": true
  }
}
EOF
    
    echo " 开发环境配置完成"
}

setup_hot_reload() {
    echo "设置热重载..."
    
    # 创建文件监视脚本
    cat > $HOME/.claude/mcp/dev/watch-and-reload.sh << 'EOF'
#!/bin/bash

# 监视 MCP 服务器代码变更并自动重载
fswatch -o $HOME/dev/context7-mcp/ | while read event; do
    echo "检测到 Context7 代码变更,重启服务器..."
    $HOME/.claude/mcp/stop-servers.sh
    sleep 2
    $HOME/.claude/mcp/start-servers.sh
done &

fswatch -o $HOME/dev/sequential-mcp/ | while read event; do
    echo "检测到 Sequential 代码变更,重启服务器..."
    $HOME/.claude/mcp/stop-servers.sh
    sleep 2
    $HOME/.claude/mcp/start-servers.sh
done &

echo " 热重载监视已启动"
EOF
    
    chmod +x $HOME/.claude/mcp/dev/watch-and-reload.sh
    
    echo " 热重载设置完成"
}

setup_dev_tools() {
    echo "安装开发工具..."
    
    # 安装调试工具
    npm install -g @mcp/debug-tools
    pip3 install mcp-dev-utils
    
    # 创建调试脚本
    cat > $HOME/.claude/mcp/dev/debug-mcp.sh << 'EOF'
#!/bin/bash

echo "MCP 服务器调试工具"
echo "=================="

# 显示服务器状态
echo "服务器状态:"
for port in 3101 3102; do
    if curl -s "http://localhost:$port/health" > /dev/null; then
        echo "   端口 $port: 运行中"
    else
        echo "   端口 $port: 停止"
    fi
done

echo ""

# 显示日志摘要
echo "最近日志:"
tail -n 10 /tmp/context7-mcp.log | sed 's/^/  Context7: /'
tail -n 10 /tmp/sequential-mcp.log | sed 's/^/  Sequential: /'

echo ""

# 性能统计
echo "性能统计:"
echo "  Context7 响应时间: $(curl -w "%{time_total}" -s -o /dev/null http://localhost:3101/ping)s"
echo "  Sequential 响应时间: $(curl -w "%{time_total}" -s -o /dev/null http://localhost:3102/ping)s"
EOF
    
    chmod +x $HOME/.claude/mcp/dev/debug-mcp.sh
    
    echo " 开发工具安装完成"
}

main() {
    echo "  Claude Code MCP 开发环境设置"
    echo "================================="
    
    setup_dev_environment
    setup_hot_reload
    setup_dev_tools
    
    echo ""
    echo " 开发环境设置完成!"
    echo ""
    echo "开发工具:"
    echo "  调试信息: ~/.claude/mcp/dev/debug-mcp.sh"
    echo "  热重载: ~/.claude/mcp/dev/watch-and-reload.sh"
    echo "  配置目录: ~/.claude/mcp/dev/"
    echo ""
    echo "开发端口:"
    echo "  Context7:  http://localhost:3101"
    echo "  Sequential: http://localhost:3102"
}

main "$@"

backup-config.sh

功能说明

配置备份和恢复脚本,确保系统配置的安全性。

bash
#!/bin/bash
# 配置备份脚本

BACKUP_DIR="$HOME/.claude/backups"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_NAME="claude_config_$TIMESTAMP"

create_backup() {
    echo "创建配置备份..."
    
    # 创建备份目录
    mkdir -p "$BACKUP_DIR/$BACKUP_NAME"
    
    # 备份主配置文件
    if [ -f "$HOME/.claude/settings.json" ]; then
        cp "$HOME/.claude/settings.json" "$BACKUP_DIR/$BACKUP_NAME/"
        echo " 备份 settings.json"
    fi
    
    if [ -f "$HOME/.claude/settings.local.json" ]; then
        cp "$HOME/.claude/settings.local.json" "$BACKUP_DIR/$BACKUP_NAME/"
        echo " 备份 settings.local.json"
    fi
    
    # 备份 MCP 配置
    if [ -d "$HOME/.claude/mcp" ]; then
        cp -r "$HOME/.claude/mcp" "$BACKUP_DIR/$BACKUP_NAME/"
        echo " 备份 MCP 配置"
    fi
    
    # 备份代理配置
    if [ -d "$HOME/.claude/agents" ]; then
        cp -r "$HOME/.claude/agents" "$BACKUP_DIR/$BACKUP_NAME/"
        echo " 备份 agents 配置"
    fi
    
    # 备份项目导向文件
    if [ -d "$HOME/.claude/.ai-rules" ]; then
        cp -r "$HOME/.claude/.ai-rules" "$BACKUP_DIR/$BACKUP_NAME/"
        echo " 备份 .ai-rules"
    fi
    
    # 创建备份清单
    cat > "$BACKUP_DIR/$BACKUP_NAME/manifest.txt" << EOF
Claude Code 配置备份
==================
备份时间: $(date)
备份内容:
- settings.json
- settings.local.json  
- mcp/ (MCP 服务配置)
- agents/ (代理配置)
- .ai-rules/ (项目导向文件)

系统信息:
- OS: $(uname -s)
- 用户: $(whoami)
- Claude Code 版本: $(claude --version 2>/dev/null || echo "未知")
EOF
    
    # 压缩备份
    cd "$BACKUP_DIR"
    tar -czf "${BACKUP_NAME}.tar.gz" "$BACKUP_NAME"
    rm -rf "$BACKUP_NAME"
    
    echo " 配置备份完成: $BACKUP_DIR/${BACKUP_NAME}.tar.gz"
}

restore_backup() {
    local backup_file="$1"
    
    if [ -z "$backup_file" ]; then
        echo "可用的备份文件:"
        ls -la "$BACKUP_DIR"/*.tar.gz 2>/dev/null || echo "没有找到备份文件"
        return 1
    fi
    
    if [ ! -f "$backup_file" ]; then
        echo " 备份文件不存在: $backup_file"
        return 1
    fi
    
    echo "恢复配置备份: $backup_file"
    
    # 创建当前配置的备份
    echo "创建当前配置的安全备份..."
    create_backup
    
    # 解压备份文件
    cd "$BACKUP_DIR"
    tar -xzf "$(basename "$backup_file")"
    local extract_dir=$(basename "$backup_file" .tar.gz)
    
    # 恢复配置文件
    if [ -f "$extract_dir/settings.json" ]; then
        cp "$extract_dir/settings.json" "$HOME/.claude/"
        echo " 恢复 settings.json"
    fi
    
    if [ -f "$extract_dir/settings.local.json" ]; then
        cp "$extract_dir/settings.local.json" "$HOME/.claude/"
        echo " 恢复 settings.local.json"
    fi
    
    if [ -d "$extract_dir/mcp" ]; then
        rm -rf "$HOME/.claude/mcp"
        cp -r "$extract_dir/mcp" "$HOME/.claude/"
        echo " 恢复 MCP 配置"
    fi
    
    if [ -d "$extract_dir/agents" ]; then
        rm -rf "$HOME/.claude/agents"
        cp -r "$extract_dir/agents" "$HOME/.claude/"
        echo " 恢复 agents 配置"
    fi
    
    if [ -d "$extract_dir/.ai-rules" ]; then
        rm -rf "$HOME/.claude/.ai-rules"
        cp -r "$extract_dir/.ai-rules" "$HOME/.claude/"
        echo " 恢复 .ai-rules"
    fi
    
    # 清理
    rm -rf "$extract_dir"
    
    echo " 配置恢复完成"
    echo "  请重启 Claude Code 以使配置生效"
}

cleanup_old_backups() {
    echo "清理旧备份..."
    
    # 保留最近30天的备份
    find "$BACKUP_DIR" -name "claude_config_*.tar.gz" -mtime +30 -delete
    
    echo " 旧备份清理完成"
}

list_backups() {
    echo "可用的配置备份:"
    echo "=================="
    
    if [ -d "$BACKUP_DIR" ]; then
        ls -la "$BACKUP_DIR"/*.tar.gz 2>/dev/null | while read -r line; do
            filename=$(echo "$line" | awk '{print $9}')
            size=$(echo "$line" | awk '{print $5}')
            date=$(echo "$line" | awk '{print $6, $7, $8}')
            echo "  $(basename "$filename") ($size bytes, $date)"
        done
    else
        echo "  没有找到备份文件"
    fi
}

main() {
    case "${1:-backup}" in
        "backup")
            create_backup
            ;;
        "restore")
            restore_backup "$2"
            ;;
        "list")
            list_backups
            ;;
        "cleanup")
            cleanup_old_backups
            ;;
        *)
            echo "Claude Code 配置备份工具"
            echo "======================="
            echo ""
            echo "用法: $0 [command] [options]"
            echo ""
            echo "命令:"
            echo "  backup          创建配置备份 (默认)"
            echo "  restore <file>  恢复指定备份"
            echo "  list           列出所有备份"
            echo "  cleanup        清理旧备份"
            echo ""
            echo "示例:"
            echo "  $0 backup"
            echo "  $0 restore ~/.claude/backups/claude_config_20240101_120000.tar.gz"
            echo "  $0 list"
            ;;
    esac
}

main "$@"

使用最佳实践

1. 定期备份

bash
# 设置定时备份 (crontab)
0 2 * * * $HOME/.claude/scripts/backup-config.sh backup

# 手动备份
./backup-config.sh backup

2. 开发环境管理

bash
# 切换到开发模式
./setup-dev-mcp.sh

# 启动热重载
~/.claude/mcp/dev/watch-and-reload.sh

# 调试服务状态
~/.claude/mcp/dev/debug-mcp.sh

3. 生产环境部署

bash
# 标准 MCP 安装
./setup-mcp.sh

# 验证服务状态
claude --mcp-status

# 服务管理
~/.claude/mcp/start-servers.sh
~/.claude/mcp/stop-servers.sh

4. 故障恢复

bash
# 列出备份
./backup-config.sh list

# 恢复配置
./backup-config.sh restore backup_file.tar.gz

# 重新初始化 MCP
./setup-mcp.sh

相关资源


脚本工具 - 自动化运维,专注开发 📜

Claude Code 使用指南