install.sh 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. #!/bin/bash
  2. # 颜色定义
  3. GREEN='\033[0;32m'
  4. YELLOW='\033[1;33m'
  5. RED='\033[0;31m'
  6. BLUE='\033[0;34m'
  7. NC='\033[0m' # 无颜色
  8. # 获取脚本所在目录的绝对路径
  9. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  10. # 显示标题
  11. echo -e "${BLUE}=========================================${NC}"
  12. echo -e "${BLUE} RAP2 MCP 工具安装程序 ${NC}"
  13. echo -e "${BLUE}=========================================${NC}"
  14. echo ""
  15. # 检查Conda环境
  16. echo -e "${YELLOW}[1/7] 检查Conda环境...${NC}"
  17. if ! command -v conda &> /dev/null; then
  18. echo -e "${YELLOW}未检测到Conda,是否要安装Miniconda? [y/N] ${NC}"
  19. read -r response
  20. if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
  21. echo -e "开始下载Miniconda安装程序..."
  22. if [[ "$OSTYPE" == "darwin"* ]]; then
  23. # macOS
  24. curl -o miniconda.sh https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
  25. else
  26. # Linux
  27. curl -o miniconda.sh https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
  28. fi
  29. if [ $? -ne 0 ]; then
  30. echo -e "${RED}下载Miniconda失败,请手动安装Conda后重试${NC}"
  31. echo -e "安装指南: https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html"
  32. exit 1
  33. fi
  34. echo -e "安装Miniconda..."
  35. bash miniconda.sh -b -p $HOME/miniconda
  36. if [ $? -ne 0 ]; then
  37. echo -e "${RED}安装Miniconda失败,请手动安装后重试${NC}"
  38. exit 1
  39. fi
  40. # 添加到PATH
  41. export PATH="$HOME/miniconda/bin:$PATH"
  42. # 初始化conda
  43. conda init bash
  44. conda init zsh
  45. echo -e "${GREEN}✓ Miniconda已安装${NC}"
  46. echo -e "${YELLOW}请关闭并重新打开终端,然后重新运行此安装脚本${NC}"
  47. exit 0
  48. else
  49. echo -e "${RED}错误: 需要Conda环境来继续安装${NC}"
  50. echo -e "请安装Conda后重试。安装指南: https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html"
  51. exit 1
  52. fi
  53. fi
  54. CONDA_VERSION=$(conda --version | awk '{print $2}')
  55. echo -e "${GREEN}✓ 已找到Conda $CONDA_VERSION${NC}"
  56. # 检查Python环境
  57. echo -e "${YELLOW}[2/7] 检查Python环境...${NC}"
  58. if ! command -v python3 &> /dev/null; then
  59. echo -e "${YELLOW}未找到Python3,将通过Conda安装${NC}"
  60. else
  61. PYTHON_VERSION=$(python3 --version | awk '{print $2}')
  62. echo -e "${GREEN}✓ 已找到系统Python $PYTHON_VERSION${NC}"
  63. fi
  64. # 检查和创建目录结构
  65. echo -e "${YELLOW}[3/7] 设置目录结构...${NC}"
  66. if [ ! -d "${SCRIPT_DIR}/rap2-mcp" ]; then
  67. echo -e "创建rap2-mcp目录..."
  68. mkdir -p "${SCRIPT_DIR}/rap2-mcp"
  69. fi
  70. # 确保服务器脚本在正确位置
  71. if [ -f "${SCRIPT_DIR}/rap2_mcp_server.py" ] && [ ! -f "${SCRIPT_DIR}/rap2-mcp/rap2_mcp_server.py" ]; then
  72. echo -e "移动服务器脚本到正确位置..."
  73. cp "${SCRIPT_DIR}/rap2_mcp_server.py" "${SCRIPT_DIR}/rap2-mcp/rap2_mcp_server.py"
  74. fi
  75. echo -e "${GREEN}✓ 目录结构已准备就绪${NC}"
  76. # 创建Conda环境
  77. echo -e "${YELLOW}[4/7] 创建Conda环境...${NC}"
  78. CONDA_ENV_NAME="rap2_mcp"
  79. # 检查环境是否已存在
  80. if conda info --envs | grep -q "$CONDA_ENV_NAME"; then
  81. echo -e "检测到已有Conda环境'$CONDA_ENV_NAME',是否重新创建? [y/N] "
  82. read -r response
  83. if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
  84. echo -e "删除旧的Conda环境..."
  85. conda env remove -n "$CONDA_ENV_NAME" -y
  86. conda create -n "$CONDA_ENV_NAME" python=3.9 -y
  87. fi
  88. else
  89. echo -e "创建新的Conda环境 '$CONDA_ENV_NAME'..."
  90. conda create -n "$CONDA_ENV_NAME" python=3.9 -y
  91. fi
  92. # 激活Conda环境
  93. echo -e "${YELLOW}[5/7] 激活Conda环境...${NC}"
  94. # 这里我们需要使用source命令来激活conda环境
  95. source $(conda info --base)/etc/profile.d/conda.sh
  96. conda activate "$CONDA_ENV_NAME"
  97. if [ $? -ne 0 ]; then
  98. echo -e "${RED}错误: 无法激活Conda环境${NC}"
  99. exit 1
  100. fi
  101. echo -e "${GREEN}✓ Conda环境'$CONDA_ENV_NAME'已激活${NC}"
  102. # 更新pip
  103. echo -e "${YELLOW}[6/7] 更新pip...${NC}"
  104. pip install --upgrade pip > /dev/null 2>&1
  105. echo -e "${GREEN}✓ pip已更新至最新版本${NC}"
  106. # 安装依赖
  107. echo -e "${YELLOW}[7/7] 安装依赖...${NC}"
  108. # 创建requirements.txt如果不存在
  109. if [ ! -f "${SCRIPT_DIR}/requirements.txt" ]; then
  110. echo -e "创建requirements.txt文件..."
  111. cat > "${SCRIPT_DIR}/requirements.txt" << EOF
  112. httpx>=0.24.0
  113. fastmcp>=0.1.0
  114. mcp-server>=0.1.0
  115. fastapi>=0.100.0
  116. EOF
  117. fi
  118. # 安装依赖
  119. echo -e "从requirements.txt安装依赖..."
  120. pip install -r "${SCRIPT_DIR}/requirements.txt"
  121. # 验证依赖安装
  122. DEPS_OK=true
  123. for pkg in httpx mcp.server fastmcp; do
  124. echo -n "检查 $pkg... "
  125. if ! python -c "import $pkg" &> /dev/null; then
  126. echo -e "${RED}失败${NC}"
  127. echo -e "${RED}尝试单独安装 $pkg...${NC}"
  128. pip install $pkg
  129. if ! python -c "import $pkg" &> /dev/null; then
  130. echo -e "${RED}无法安装 $pkg${NC}"
  131. DEPS_OK=false
  132. else
  133. echo -e "${GREEN}成功${NC}"
  134. fi
  135. else
  136. echo -e "${GREEN}成功${NC}"
  137. fi
  138. done
  139. if [ "$DEPS_OK" = false ]; then
  140. echo -e "${RED}警告: 部分依赖安装失败,程序可能无法正常工作${NC}"
  141. else
  142. echo -e "${GREEN}✓ 所有依赖已成功安装${NC}"
  143. fi
  144. # 创建启动脚本
  145. echo -e "创建启动脚本..."
  146. cat > "${SCRIPT_DIR}/start.sh" << EOF
  147. #!/bin/bash
  148. # 获取脚本所在目录的绝对路径
  149. SCRIPT_DIR="\$(cd "\$(dirname "\${BASH_SOURCE[0]}")" && pwd)"
  150. # 默认值
  151. RAP2_URL="http://rap2api.taobao.org"
  152. RAP2_SID=""
  153. RAP2_SID_SIG=""
  154. # 解析参数
  155. while [[ \$# -gt 0 ]]; do
  156. case \$1 in
  157. --url=*)
  158. RAP2_URL="\${1#*=}"
  159. shift
  160. ;;
  161. --sid=*)
  162. RAP2_SID="\${1#*=}"
  163. shift
  164. ;;
  165. --sid-sig=*)
  166. RAP2_SID_SIG="\${1#*=}"
  167. shift
  168. ;;
  169. *)
  170. echo "未知参数: \$1"
  171. exit 1
  172. ;;
  173. esac
  174. done
  175. # 激活Conda环境
  176. source \$(conda info --base)/etc/profile.d/conda.sh
  177. conda activate rap2_mcp
  178. # 启动服务器
  179. python "\${SCRIPT_DIR}/rap2-mcp/rap2_mcp_server.py" \\
  180. --rap2-url="\$RAP2_URL" \\
  181. --rap2-sid="\$RAP2_SID" \\
  182. --rap2-sid-sig="\$RAP2_SID_SIG"
  183. EOF
  184. # 设置启动脚本权限
  185. echo -e "设置启动脚本权限..."
  186. chmod +x "${SCRIPT_DIR}/start.sh"
  187. echo -e "${GREEN}✓ 启动脚本权限已设置${NC}"
  188. echo -e "${GREEN}安装完成!${NC}"
  189. echo ""
  190. # 显示MCP配置说明
  191. echo -e "${YELLOW}=== RAP2 MCP 配置指南 ===${NC}"
  192. echo -e "请在Cursor的MCP配置文件中添加以下配置:"
  193. echo -e ""
  194. echo -e "${GREEN}文件路径: ${HOME}/.cursor/mcp.json${NC}"
  195. echo -e ""
  196. echo -e "配置格式:"
  197. echo -e "${YELLOW}{
  198. \"mcpServers\": {
  199. \"RAP2 MCP\": {
  200. \"command\": \"$(conda info --base)/envs/rap2_mcp/bin/python\",
  201. \"args\": [
  202. \"${SCRIPT_DIR}/rap2-mcp/rap2_mcp_server.py\",
  203. \"--rap2-url=http://rap2api.taobao.org\",
  204. \"--rap2-sid=您的koa.sid值\",
  205. \"--rap2-sid-sig=您的koa.sid.sig值\"
  206. ]
  207. }
  208. }
  209. }${NC}"
  210. echo -e ""
  211. echo -e "${YELLOW}如何获取Cookie值:${NC}"
  212. echo -e "1. 使用浏览器登录RAP2系统"
  213. echo -e "2. 打开开发者工具(F12),切换到网络(Network)标签"
  214. echo -e "3. 选择任意请求,在Headers中找到Cookie"
  215. echo -e "4. 从Cookie中提取koa.sid和koa.sid.sig的值"
  216. echo -e ""
  217. echo -e "${YELLOW}快速启动:${NC}"
  218. echo -e "可以使用以下命令快速启动服务器:"
  219. echo -e "${GREEN}./start.sh --url=http://rap2api.taobao.org --sid=您的koa.sid值 --sid-sig=您的koa.sid.sig值${NC}"
  220. echo -e ""
  221. echo -e "${GREEN}祝你使用愉快!${NC}"
  222. echo -e "${BLUE}=========================================${NC}"