Skip to main content
Glama

AI Customer Service MCP Server

by yakir-Yang
test-sse.sh11.7 kB
#!/bin/bash # SSE连接测试脚本 # 专门用于测试腾讯云ADP的SSE连接 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' NC='\033[0m' # 日志函数 log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } log_test() { echo -e "${PURPLE}[TEST]${NC} $1" } log_sse() { echo -e "${CYAN}[SSE]${NC} $1" } # 配置 SERVER_URL="http://106.53.191.184:3000" TEST_DURATION=30 # 测试持续时间(秒) LOG_FILE="/tmp/sse_test.log" # 清理函数 cleanup() { if [ -f "$LOG_FILE" ]; then rm -f "$LOG_FILE" fi # 杀死后台进程 jobs -p | xargs -r kill 2>/dev/null || true } # 设置退出时清理 trap cleanup EXIT # 显示帮助信息 show_help() { echo "SSE连接测试脚本" echo echo "用法: $0 [选项]" echo echo "选项:" echo " -h, --help 显示帮助信息" echo " -s, --server 指定服务器地址 (默认: $SERVER_URL)" echo " -d, --duration 测试持续时间,秒 (默认: $TEST_DURATION)" echo " -v, --verbose 详细输出模式" echo " -q, --quiet 安静模式,只显示结果" echo echo "示例:" echo " $0 # 使用默认参数测试30秒" echo " $0 -s http://localhost:3000 -d 60 # 测试本地服务器60秒" echo " $0 -v # 详细输出模式" echo " $0 -q # 安静模式" } # 测试SSE端点响应头 test_sse_headers() { log_test "测试SSE端点响应头..." local response=$(curl -s -I "$SERVER_URL/sse" --connect-timeout 10 2>/dev/null) if [ $? -eq 0 ]; then log_success "SSE端点可访问" # 检查关键响应头 if echo "$response" | grep -q "Content-Type: text/event-stream"; then log_success "Content-Type正确: text/event-stream" else log_warning "Content-Type可能不正确" fi if echo "$response" | grep -q "Cache-Control: no-cache"; then log_success "Cache-Control正确: no-cache" else log_warning "Cache-Control可能不正确" fi if echo "$response" | grep -q "Connection: keep-alive"; then log_success "Connection正确: keep-alive" else log_warning "Connection可能不正确" fi if echo "$response" | grep -q "Access-Control-Allow-Origin"; then log_success "CORS配置正确" else log_warning "CORS配置可能有问题" fi return 0 else log_error "SSE端点不可访问" return 1 fi } # 测试SSE数据流 test_sse_stream() { log_test "测试SSE数据流 (${TEST_DURATION}秒)..." # 清空日志文件 > "$LOG_FILE" # 启动SSE连接(后台运行) curl -s -N "$SERVER_URL/sse" > "$LOG_FILE" 2>&1 & local curl_pid=$! # 等待连接建立 sleep 3 # 检查连接是否建立 if ! kill -0 $curl_pid 2>/dev/null; then log_error "SSE连接失败" return 1 fi log_success "SSE连接已建立 (PID: $curl_pid)" # 监控数据流 local start_time=$(date +%s) local end_time=$((start_time + TEST_DURATION)) local message_count=0 local last_message_time=0 while [ $(date +%s) -lt $end_time ]; do if [ -f "$LOG_FILE" ] && [ -s "$LOG_FILE" ]; then # 计算新消息数量 local current_count=$(wc -l < "$LOG_FILE" 2>/dev/null || echo 0) local new_messages=$((current_count - message_count)) if [ $new_messages -gt 0 ]; then local current_time=$(date +%s) local time_diff=$((current_time - last_message_time)) if [ $VERBOSE -eq 1 ]; then log_sse "收到 $new_messages 条新消息 (间隔: ${time_diff}秒)" fi message_count=$current_count last_message_time=$current_time fi fi sleep 1 done # 停止SSE连接 kill $curl_pid 2>/dev/null || true wait $curl_pid 2>/dev/null || true log_success "SSE测试完成,共收到 $message_count 条消息" # 分析消息内容 if [ -f "$LOG_FILE" ] && [ -s "$LOG_FILE" ]; then analyze_sse_messages fi return 0 } # 分析SSE消息内容 analyze_sse_messages() { log_test "分析SSE消息内容..." if [ ! -f "$LOG_FILE" ] || [ ! -s "$LOG_FILE" ]; then log_warning "没有SSE消息数据" return 1 fi # 统计消息类型 local connection_messages=$(grep -c "event: connected" "$LOG_FILE" 2>/dev/null || echo 0) local mcp_info_messages=$(grep -c "event: mcp-info" "$LOG_FILE" 2>/dev/null || echo 0) local heartbeat_messages=$(grep -c "event: heartbeat" "$LOG_FILE" 2>/dev/null || echo 0) local tools_messages=$(grep -c "event: tools-available" "$LOG_FILE" 2>/dev/null || echo 0) log_info "消息统计:" echo " 连接消息: $connection_messages" echo " MCP信息: $mcp_info_messages" echo " 心跳消息: $heartbeat_messages" echo " 工具信息: $tools_messages" # 显示最后几条消息 if [ $VERBOSE -eq 1 ]; then log_info "最后5条消息:" tail -5 "$LOG_FILE" | sed 's/^/ /' fi # 检查消息格式 local valid_messages=$(grep -c "^data:" "$LOG_FILE" 2>/dev/null || echo 0) local total_lines=$(wc -l < "$LOG_FILE" 2>/dev/null || echo 0) if [ $total_lines -gt 0 ]; then local valid_ratio=$((valid_messages * 100 / total_lines)) log_info "有效消息比例: $valid_ratio% ($valid_messages/$total_lines)" if [ $valid_ratio -gt 50 ]; then log_success "SSE消息格式正确" else log_warning "SSE消息格式可能有问题" fi fi } # 测试SSE连接稳定性 test_sse_stability() { log_test "测试SSE连接稳定性..." local test_count=5 local success_count=0 for i in $(seq 1 $test_count); do log_info "稳定性测试 $i/$test_count..." # 测试5秒连接 local result=$(timeout 5s curl -s -N "$SERVER_URL/sse" 2>/dev/null | wc -l) if [ $result -gt 0 ]; then log_success "测试 $i 成功,收到 $result 行数据" success_count=$((success_count + 1)) else log_warning "测试 $i 失败,没有收到数据" fi sleep 1 done local success_rate=$((success_count * 100 / test_count)) log_info "稳定性测试结果: $success_count/$test_count 成功 ($success_rate%)" if [ $success_rate -ge 80 ]; then log_success "SSE连接稳定性良好" return 0 else log_warning "SSE连接稳定性需要改进" return 1 fi } # 测试腾讯云ADP兼容性 test_tencent_adp_compatibility() { log_test "测试腾讯云ADP兼容性..." # 模拟腾讯云ADP的请求头 local response=$(curl -s -I "$SERVER_URL/sse" \ -H "User-Agent: TencentADP/1.0" \ -H "Accept: text/event-stream" \ -H "Cache-Control: no-cache" \ --connect-timeout 10 2>/dev/null) if [ $? -eq 0 ]; then log_success "腾讯云ADP请求头兼容性测试通过" # 检查关键头部 if echo "$response" | grep -q "Access-Control-Allow-Origin"; then log_success "CORS支持正确" else log_warning "CORS支持可能有问题" fi if echo "$response" | grep -q "Access-Control-Allow-Headers"; then log_success "CORS头部支持正确" else log_warning "CORS头部支持可能有问题" fi return 0 else log_error "腾讯云ADP兼容性测试失败" return 1 fi } # 生成测试报告 generate_report() { local total_tests=$1 local passed_tests=$2 local failed_tests=$((total_tests - passed_tests)) echo echo -e "${BLUE}==========================================" echo " SSE连接测试报告" echo "==========================================${NC}" echo -e "服务器地址: ${BLUE}$SERVER_URL${NC}" echo -e "测试持续时间: ${BLUE}${TEST_DURATION}秒${NC}" echo -e "总测试数: ${BLUE}$total_tests${NC}" echo -e "通过测试: ${GREEN}$passed_tests${NC}" echo -e "失败测试: ${RED}$failed_tests${NC}" echo -e "成功率: ${BLUE}$((passed_tests * 100 / total_tests))%${NC}" echo if [ $failed_tests -eq 0 ]; then log_success "🎉 所有SSE测试通过!服务器与腾讯云ADP兼容。" echo echo -e "${BLUE}腾讯云ADP配置建议:${NC}" echo "- 服务器URL: $SERVER_URL" echo "- 超时时间: 120秒" echo "- SSE读取超时: 600秒" echo "- 支持的事件: connected, mcp-info, heartbeat, tools-available" else log_warning "⚠️ 有 $failed_tests 个测试失败,请检查服务器配置。" echo echo -e "${BLUE}故障排除建议:${NC}" echo "1. 检查服务器是否正常运行" echo "2. 检查SSE端点实现" echo "3. 检查CORS配置" echo "4. 查看服务器日志" echo "5. 检查网络连接" fi } # 主测试函数 run_tests() { local total_tests=0 local passed_tests=0 echo -e "${BLUE}" echo "==========================================" echo " SSE连接测试" echo " 服务器: $SERVER_URL" echo " 持续时间: ${TEST_DURATION}秒" echo "==========================================" echo -e "${NC}" # 执行测试 echo log_info "开始执行SSE测试..." echo # 测试1: SSE响应头 total_tests=$((total_tests + 1)) if test_sse_headers; then passed_tests=$((passed_tests + 1)) fi echo # 测试2: SSE数据流 total_tests=$((total_tests + 1)) if test_sse_stream; then passed_tests=$((passed_tests + 1)) fi echo # 测试3: 连接稳定性 total_tests=$((total_tests + 1)) if test_sse_stability; then passed_tests=$((passed_tests + 1)) fi echo # 测试4: 腾讯云ADP兼容性 total_tests=$((total_tests + 1)) if test_tencent_adp_compatibility; then passed_tests=$((passed_tests + 1)) fi echo # 生成报告 generate_report $total_tests $passed_tests } # 解析命令行参数 VERBOSE=0 QUIET=0 while [[ $# -gt 0 ]]; do case $1 in -h|--help) show_help exit 0 ;; -s|--server) SERVER_URL="$2" shift 2 ;; -d|--duration) TEST_DURATION="$2" shift 2 ;; -v|--verbose) VERBOSE=1 shift ;; -q|--quiet) QUIET=1 shift ;; *) log_error "未知参数: $1" show_help exit 1 ;; esac done # 运行测试 if [ $QUIET -eq 1 ]; then run_tests > /dev/null 2>&1 echo "SSE测试完成" else run_tests fi

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yakir-Yang/mcp_demo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server