1+ #! /usr/bin/env bash
2+ # Test MCP server connectivity
3+
4+ set -e
5+
6+ # Source test framework
7+ source " $( dirname " $0 " ) /../test_framework.sh"
8+
9+ # Test functions
10+ test_mcp_server_connectivity () {
11+ local test_name=" MCP Server Connectivity"
12+
13+ # Skip if Claude Code not installed
14+ if ! command -v claude & > /dev/null; then
15+ skip_test " $test_name " " Claude Code not installed"
16+ return
17+ fi
18+
19+ # Check if any MCP servers are configured
20+ local servers_json
21+ servers_json=$( claude settings show 2> /dev/null | jq -r ' .mcpServers // {}' 2> /dev/null || echo " {}" )
22+
23+ if [[ " $servers_json " == " {}" ]] || [[ -z " $servers_json " ]]; then
24+ skip_test " $test_name " " No MCP servers configured"
25+ return
26+ fi
27+
28+ # Test each configured server
29+ local server_count=0
30+ local working_count=0
31+ local failed_servers=()
32+
33+ while IFS= read -r server_name; do
34+ (( server_count++ ))
35+
36+ # Try to list resources from the server (basic connectivity test)
37+ if claude mcp list 2> /dev/null | grep -q " ^${server_name} :" ; then
38+ (( working_count++ ))
39+ echo " ✓ Server '$server_name ' is responsive"
40+ else
41+ failed_servers+=(" $server_name " )
42+ echo " ✗ Server '$server_name ' is not responsive"
43+ fi
44+ done < <( echo " $servers_json " | jq -r ' keys[]' 2> /dev/null)
45+
46+ if [[ $server_count -eq 0 ]]; then
47+ skip_test " $test_name " " No servers found in configuration"
48+ elif [[ $working_count -eq $server_count ]]; then
49+ pass_test " $test_name " " All $server_count servers are responsive"
50+ elif [[ $working_count -gt 0 ]]; then
51+ fail_test " $test_name " " $working_count /$server_count servers responsive. Failed: ${failed_servers[*]} "
52+ else
53+ fail_test " $test_name " " No servers are responsive"
54+ fi
55+ }
56+
57+ test_mcp_server_initialization () {
58+ local test_name=" MCP Server Initialization"
59+
60+ # Skip if Claude Code not installed
61+ if ! command -v claude & > /dev/null; then
62+ skip_test " $test_name " " Claude Code not installed"
63+ return
64+ fi
65+
66+ # Check specific critical servers
67+ local critical_servers=(" filesystem" " git" )
68+ local all_working=true
69+
70+ for server in " ${critical_servers[@]} " ; do
71+ if claude mcp list 2> /dev/null | grep -q " ^${server} :" ; then
72+ echo " ✓ Critical server '$server ' initialized"
73+ else
74+ echo " ✗ Critical server '$server ' not initialized"
75+ all_working=false
76+ fi
77+ done
78+
79+ if [[ " $all_working " == " true" ]]; then
80+ pass_test " $test_name " " All critical servers initialized"
81+ else
82+ fail_test " $test_name " " Some critical servers not initialized"
83+ fi
84+ }
85+
86+ test_mcp_api_key_configuration () {
87+ local test_name=" MCP API Key Configuration"
88+
89+ # Check if API keys file exists with correct permissions
90+ local api_keys_file=" $HOME /.config/zsh/51-api-keys.zsh"
91+
92+ if [[ -f " $api_keys_file " ]]; then
93+ # Check file permissions (should be 600)
94+ local perms=$( stat -f " %OLp" " $api_keys_file " 2> /dev/null || stat -c " %a" " $api_keys_file " 2> /dev/null)
95+
96+ if [[ " $perms " == " 600" ]]; then
97+ pass_test " $test_name " " API keys file has secure permissions (600)"
98+ else
99+ fail_test " $test_name " " API keys file has insecure permissions ($perms , expected 600)"
100+ fi
101+ else
102+ skip_test " $test_name " " API keys file not found"
103+ fi
104+ }
105+
106+ test_mcp_server_response_time () {
107+ local test_name=" MCP Server Response Time"
108+
109+ # Skip if Claude Code not installed
110+ if ! command -v claude & > /dev/null; then
111+ skip_test " $test_name " " Claude Code not installed"
112+ return
113+ fi
114+
115+ # Test response time for filesystem server (most commonly used)
116+ local start_time=$( date +%s)
117+
118+ if timeout 5 claude mcp list 2> /dev/null | grep -q " ^filesystem:" ; then
119+ local end_time=$( date +%s)
120+ local response_time=$(( end_time - start_time))
121+
122+ if [[ $response_time -le 2 ]]; then
123+ pass_test " $test_name " " Server responded in ${response_time} s (≤2s)"
124+ elif [[ $response_time -le 5 ]]; then
125+ warn_test " $test_name " " Server responded in ${response_time} s (>2s but ≤5s)"
126+ else
127+ fail_test " $test_name " " Server responded in ${response_time} s (>5s)"
128+ fi
129+ else
130+ fail_test " $test_name " " Server did not respond within 5 seconds"
131+ fi
132+ }
133+
134+ # Run tests
135+ run_test_suite " MCP Integration" \
136+ test_mcp_server_connectivity \
137+ test_mcp_server_initialization \
138+ test_mcp_api_key_configuration \
139+ test_mcp_server_response_time
0 commit comments