6.0 KiB
6.0 KiB
调试指南
已实施的修复
修复1: 连接状态管理
- 问题: 添加服务器时自动尝试连接并失败,导致状态为'error',无法再次连接
- 修复: 修改
newServer.ts的addServer函数,默认状态改为 'disconnected' - 位置:
web/src/stores/newServer.ts第 99 行
修复2: 连接失败处理
- 问题: 连接失败后状态设置为'error',无法重试
- 修复: 修改
connectServer函数,失败时设置为 'disconnected' 而不是 'error' - 位置:
web/src/stores/newServer.ts第 170-174 行
修复3: 断开连接时保存状态
- 问题: 断开连接后状态没有持久化
- 修复: 在
disconnectServer函数中添加saveServers()调用 - 位置:
web/src/stores/newServer.ts第 190 行
修复4: 编辑按钮调试
- 问题: 编辑按钮点击没有响应
- 修复: 添加了详细的 console.log 调试信息
- 位置:
web/src/components/MCPSettings.vue第 490-495 行
测试步骤
1. 测试编辑按钮功能
- 打开浏览器: http://localhost:5173
- 打开开发者工具 (F12 或 Cmd+Option+I)
- 切换到 Console 标签
- 点击任意服务器的"编辑"按钮
- 预期输出:
🔍 打开服务器详情: {id: "...", name: "...", ...} ✅ 详情页状态: true {id: "...", name: "...", ...} - 预期行为: 应该弹出服务器详情对话框
如果没有输出:
- 检查按钮是否正确绑定了
@click="openServerDetail(server)" - 检查是否有 JavaScript 错误
如果有输出但没有弹窗:
- 检查
showServerDetail是否正确控制 modal 显示 - 检查
MCPServerDetail组件的 props 绑定
2. 测试连接功能
2.1 确保MCP服务器运行
# 在新终端运行HTTP服务器
cd /Users/gavin/xhs/mcp_client/xhsLoginMCP
node server.js
# 应该看到: HTTP MCP 服务器运行在 http://0.0.0.0:3100
2.2 添加新服务器
- 点击"添加服务器"按钮
- 填写配置:
- 名称: Test HTTP Server
- URL: http://localhost:3100/mcp
- 传输类型: HTTP
- 点击"确定"
- 预期: 服务器添加成功,状态为 "disconnected"(灰色点)
- 检查控制台: 应该看到
🎯 服务器添加成功,状态: disconnected
2.3 测试连接
- 找到刚添加的服务器卡片
- 点击"连接"按钮
- 检查控制台输出:
🔌 开始连接服务器: server-id-xxx 📡 正在连接 Test HTTP Server (HTTP)... ✅ 连接成功: server-id-xxx - 预期行为:
- 服务器状态变为 "connected"(绿色点)
- "连接"按钮变为"断开"按钮
- 可以看到服务器提供的工具列表
2.4 测试断开连接
- 点击"断开"按钮
- 检查控制台输出:
🔌 断开服务器连接: server-id-xxx - 预期行为:
- 服务器状态变为 "disconnected"
- "断开"按钮变回"连接"按钮
2.5 测试重新连接
- 再次点击"连接"按钮
- 预期: 应该能够成功连接(之前因为error状态无法重连)
常见问题排查
Q1: 点击编辑按钮完全没有反应
排查步骤:
- 打开 Console,看是否有任何错误
- 检查是否有
🔍 打开服务器详情日志 - 如果没有日志,检查 Vue 组件是否正确渲染
- 检查按钮的
@click事件是否被其他元素遮挡
可能原因:
- JavaScript 错误导致事件处理器失效
- 按钮 DOM 事件被父元素阻止
- Vue 响应式系统问题
Q2: 有日志输出但modal不显示
排查步骤:
- 检查
showServerDetail.value是否确实设置为true - 在 Elements 标签中查找
<n-modal>元素 - 检查 modal 的 CSS 是否被覆盖(z-index等)
解决方案:
<!-- 检查 MCPServerDetail 组件的 v-model 绑定 -->
<MCPServerDetail
v-model:show="showServerDetail"
:server="editingServer"
/>
Q3: 连接按钮始终不可用
排查步骤:
- 检查服务器的
status值 - 查看连接按钮的条件渲染逻辑:
v-if="server.status !== 'connected' && server.status !== 'connecting'" - 如果状态是 'error',应该已经被修复为 'disconnected'
验证修复:
// 在Console中执行
const store = useServerStore()
console.log(store.servers.map(s => ({ id: s.id, name: s.name, status: s.status })))
Q4: 连接一直失败
排查步骤:
-
确认MCP服务器确实在运行:
curl -X POST http://localhost:3100/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","clientInfo":{"name":"test","version":"1.0.0"}}}'预期响应包含
"result"字段 -
检查浏览器控制台的Network标签
- 查看请求是否发送
- 查看响应状态码和内容
- 检查是否有CORS错误
-
查看详细的连接日志:
📡 正在连接 xxx... ❌ 连接失败: Error message
验证清单
- 开发服务器运行在 http://localhost:5173
- MCP服务器运行在 http://localhost:3100
- 浏览器控制台打开并切换到 Console 标签
- 点击"编辑"按钮能看到调试日志
- 编辑按钮能正常打开详情对话框
- 添加服务器后状态为 "disconnected"
- 点击"连接"按钮能成功连接
- 连接后能看到工具列表
- 点击"断开"按钮能断开连接
- 断开后能再次连接
下一步调试
如果以上修复仍然不能解决问题,请在控制台执行以下代码并提供输出:
// 检查Vue应用状态
const app = document.querySelector('#app').__vueParentComponent
console.log('Vue应用:', app)
// 检查服务器store状态
const { useServerStore } = await import('/src/stores/newServer.ts')
const store = useServerStore()
console.log('服务器列表:', store.servers)
console.log('连接状态:', store.servers.map(s => ({ name: s.name, status: s.status })))
// 检查响应式状态
console.log('showServerDetail:', showServerDetail?.value)
console.log('editingServer:', editingServer?.value)