This commit is contained in:
2025-08-24 21:15:38 +08:00
parent 2325eb2fc8
commit dbcd40f604
13 changed files with 6534 additions and 363 deletions

150
MCP/test_mcp_timeout_fix.py Normal file
View File

@@ -0,0 +1,150 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
测试MCP服务器超时修复
"""
import os
import sys
import subprocess
import time
import json
def test_mcp_server_timeout_fix():
"""测试MCP服务器是否能快速启动并响应"""
print("开始测试MCP服务器超时修复...")
# 获取当前目录
mcp_dir = os.path.dirname(os.path.abspath(__file__))
script_path = os.path.join(mcp_dir, 'mcpserver_stdio.py')
try:
# 启动MCP服务器进程
print("启动MCP服务器...")
start_time = time.time()
process = subprocess.Popen(
[sys.executable, script_path],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
cwd=mcp_dir
)
# 等待服务器启动(减少等待时间)
time.sleep(2) # 从3秒减少到2秒
startup_time = time.time() - start_time
print(f"服务器启动耗时: {startup_time:.2f}")
# 发送初始化请求
init_request = {
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {
"name": "test-client",
"version": "1.0.0"
}
}
}
print("发送初始化请求...")
request_start = time.time()
process.stdin.write(json.dumps(init_request) + '\n')
process.stdin.flush()
# 读取响应
response_line = process.stdout.readline()
init_time = time.time() - request_start
if response_line:
print(f"✅ 初始化成功,耗时: {init_time:.2f}")
print(f"收到响应: {response_line.strip()}")
else:
print("❌ 初始化失败:无响应")
return False
# 发送简单的工具调用请求
tool_request = {
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_context",
"arguments": {
"question": "ThingDef" # 简单的测试查询
}
}
}
print("发送工具调用请求...")
tool_start = time.time()
process.stdin.write(json.dumps(tool_request) + '\n')
process.stdin.flush()
# 等待响应(减少超时时间)
timeout = 20 # 从30秒减少到20秒
response_received = False
while time.time() - tool_start < timeout:
if process.poll() is not None:
print("服务器进程已退出")
break
response_line = process.stdout.readline()
if response_line:
tool_time = time.time() - tool_start
print(f"✅ 工具调用成功,耗时: {tool_time:.2f}")
print(f"工具调用响应: {response_line.strip()[:200]}...") # 只显示前200个字符
response_received = True
break
time.sleep(0.1)
total_time = time.time() - start_time
if response_received:
print(f"✅ 测试成功MCP服务器能够正常处理请求")
print(f"总耗时: {total_time:.2f}")
# 性能评估
if total_time < 15:
print("🚀 性能优秀:服务器响应速度很快")
elif total_time < 25:
print("✅ 性能良好:服务器响应速度可接受")
else:
print("⚠️ 性能一般:服务器响应较慢,可能仍有超时风险")
else:
print("❌ 测试失败:超时未收到响应")
return False
except Exception as e:
print(f"❌ 测试出错: {e}")
return False
finally:
# 清理进程
try:
process.terminate()
process.wait(timeout=5)
except:
try:
process.kill()
except:
pass
print("测试完成")
return True
if __name__ == "__main__":
success = test_mcp_server_timeout_fix()
if success:
print("\n🎉 MCP服务器超时问题已修复")
print("现在可以在Qoder IDE中重新连接MCP服务器了。")
else:
print("\n❌ MCP服务器仍存在问题需要进一步调试。")