fix: update init.sh with lessons from MCP SSE debugging
- Rename mode "sse" → "remote" (actual transport is Streamable HTTP) - Fix .mcp.json fallback: "type": "sse" → "type": "http" - Add post-install connection verification (curl initialize test) - Accept "sse" as alias for backward compatibility Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
45
init.sh
45
init.sh
@@ -21,10 +21,10 @@ while [[ $# -gt 0 ]]; do
|
||||
--mode) MODE="$2"; shift 2 ;;
|
||||
--token) TOKEN="$2"; shift 2 ;;
|
||||
-h|--help)
|
||||
echo "Usage: ./init.sh [--mode sse|stdio] [--token MCP_API_KEY]"
|
||||
echo "Usage: ./init.sh [--mode remote|stdio] [--token MCP_API_KEY]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " --mode MCP connection mode: sse (remote, recommended) or stdio (local)"
|
||||
echo " --mode MCP connection mode: remote (Streamable HTTP, recommended) or stdio (local Node.js)"
|
||||
echo " --token MCP API Key (aiproj_pk_xxx)"
|
||||
echo ""
|
||||
echo "Without arguments, runs in interactive mode."
|
||||
@@ -49,7 +49,12 @@ read_config_value() {
|
||||
echo "$default"
|
||||
}
|
||||
|
||||
CONFIG_MODE=$(read_config_value "mode" "sse")
|
||||
CONFIG_MODE=$(read_config_value "mode" "remote")
|
||||
|
||||
# Normalize mode aliases: sse → remote
|
||||
if [ "$MODE" = "sse" ]; then
|
||||
MODE="remote"
|
||||
fi
|
||||
|
||||
# ── Detect claude CLI ────────────────────────────────────────────────
|
||||
HAS_CLAUDE=false
|
||||
@@ -64,13 +69,13 @@ if [ -z "$MODE" ]; then
|
||||
echo "└─────────────────────────────────────┘"
|
||||
echo ""
|
||||
echo "MCP 连接模式:"
|
||||
echo " 1) sse - 远程连接 (推荐,零依赖)"
|
||||
echo " 1) remote - 远程连接 (推荐,零依赖,Streamable HTTP)"
|
||||
echo " 2) stdio - 本地进程 (需要 Node.js + mcp-task-bridge)"
|
||||
echo ""
|
||||
read -p "选择模式 [1/2] (default: $([ "$CONFIG_MODE" = "stdio" ] && echo "2" || echo "1")): " mode_choice
|
||||
case "$mode_choice" in
|
||||
2|stdio) MODE="stdio" ;;
|
||||
*) MODE="sse" ;;
|
||||
*) MODE="remote" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
@@ -94,7 +99,7 @@ echo ""
|
||||
echo "配置信息:"
|
||||
echo " 模式: $MODE"
|
||||
echo " Claude CLI: $($HAS_CLAUDE && echo '检测到' || echo '未检测到 (回退写 .mcp.json)')"
|
||||
if [ "$MODE" = "sse" ]; then
|
||||
if [ "$MODE" = "remote" ]; then
|
||||
echo " URL: $SSE_URL"
|
||||
else
|
||||
echo " API: $API_BASE"
|
||||
@@ -102,7 +107,7 @@ fi
|
||||
echo ""
|
||||
|
||||
# ── Configure MCP ────────────────────────────────────────────────────
|
||||
if [ "$MODE" = "sse" ]; then
|
||||
if [ "$MODE" = "remote" ]; then
|
||||
if $HAS_CLAUDE; then
|
||||
# 新版 Claude Code: 用 claude mcp add 注册(transport=http,即 Streamable HTTP)
|
||||
# 先移除旧配置(忽略错误)
|
||||
@@ -110,13 +115,13 @@ if [ "$MODE" = "sse" ]; then
|
||||
claude mcp add ai-proj "$SSE_URL" -t http -s user -H "X-API-Key: $TOKEN" 2>&1
|
||||
echo "✅ 已通过 claude mcp add 注册 (Streamable HTTP)"
|
||||
else
|
||||
# 旧版或无 CLI: 回退写 .mcp.json
|
||||
# 旧版或无 CLI: 回退写 .mcp.json(使用 http transport)
|
||||
mkdir -p "$(dirname "$MCP_CONFIG")"
|
||||
cat > "$MCP_CONFIG" << EOF
|
||||
{
|
||||
"mcpServers": {
|
||||
"ai-proj": {
|
||||
"type": "sse",
|
||||
"type": "http",
|
||||
"url": "$SSE_URL",
|
||||
"headers": {
|
||||
"X-API-Key": "$TOKEN"
|
||||
@@ -125,7 +130,7 @@ if [ "$MODE" = "sse" ]; then
|
||||
}
|
||||
}
|
||||
EOF
|
||||
echo "✅ 已生成 $MCP_CONFIG (SSE 模式)"
|
||||
echo "✅ 已生成 $MCP_CONFIG (Streamable HTTP 模式)"
|
||||
fi
|
||||
|
||||
elif [ "$MODE" = "stdio" ]; then
|
||||
@@ -197,6 +202,24 @@ done
|
||||
echo " 已安装 $SKILL_COUNT 个技能"
|
||||
echo "✅ 技能安装完成 → $SKILLS_DIR"
|
||||
|
||||
# ── Verify MCP connection ────────────────────────────────────────────
|
||||
echo ""
|
||||
echo "🔍 验证 MCP 连接..."
|
||||
if [ "$MODE" = "remote" ]; then
|
||||
VERIFY_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X POST "$SSE_URL" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "X-API-Key: $TOKEN" \
|
||||
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"init-verify","version":"1.0"}}}' \
|
||||
--connect-timeout 10 --max-time 15 2>/dev/null)
|
||||
if [ "$VERIFY_RESPONSE" = "200" ]; then
|
||||
echo " ✅ MCP 服务端连接正常 (HTTP $VERIFY_RESPONSE)"
|
||||
else
|
||||
echo " ⚠️ MCP 服务端连接异常 (HTTP $VERIFY_RESPONSE)"
|
||||
echo " 请检查: 1) API Key 是否正确 2) 服务端是否运行 3) 网络是否通畅"
|
||||
echo " 测试命令: curl -s -X POST '$SSE_URL' -H 'X-API-Key: \$TOKEN' -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{}}'"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "┌─────────────────────────────────────┐"
|
||||
echo "│ ✅ 初始化完成! │"
|
||||
@@ -204,7 +227,7 @@ echo "└───────────────────────
|
||||
echo ""
|
||||
echo "已完成配置:"
|
||||
if $HAS_CLAUDE; then
|
||||
echo " ✅ MCP 服务器 (claude mcp add)"
|
||||
echo " ✅ MCP 服务器 (claude mcp add, transport=http)"
|
||||
else
|
||||
echo " ✅ MCP 服务器 → $MCP_CONFIG"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user