Files
Claude-Code-Workflow/MCP_FIX_SUMMARY.md
catlog22 b22839c99f fix: Resolve MCP installation issues and enhance path resolution
- Fixed API endpoint mismatches in mcp-manager.js to ensure global install/update buttons function correctly.
- Corrected undefined function references in mcp-manager.js for project installation.
- Refactored event handling to eliminate global scope pollution in mcp-manager.js.
- Added comprehensive debugging guide for MCP installation issues.
- Implemented a session path resolver to infer content types from filenames and paths, improving usability.
- Introduced tests for embeddings improvements in init and status commands to verify functionality.
2025-12-17 22:05:16 +08:00

8.0 KiB
Raw Blame History

CCW MCP 工具安装问题修复总结

📊 问题发现

通过 Gemini AI 深度分析,发现了 3 个导致 MCP 安装按钮无响应的关键问题:

🔴 问题 1: API 端点不匹配Critical

  • 文件: ccw/src/templates/dashboard-js/components/mcp-manager.js
  • 影响: 全局安装/更新按钮完全无响应
  • 根本原因: 前端调用 /api/mcp-add-global,后端定义 /api/mcp-add-global-server
  • 修复位置:
    • Line 960: installCcwToolsMcp() 全局安装
    • Line 1024: updateCcwToolsMcp() 全局更新

🔴 问题 2: 未定义的函数引用High

  • 文件: ccw/src/templates/dashboard-js/views/mcp-manager.js
  • 影响: "从其他项目安装" 按钮抛出 ReferenceError
  • 根本原因: 调用不存在的 installMcpToProject,正确名称是 copyMcpServerToProject
  • 修复位置:
    • Line 1352: Install to project 按钮事件处理
    • Line 1847: 模板安装逻辑

🟡 问题 3: 全局作用域污染Medium

  • 文件: ccw/src/templates/dashboard-js/views/mcp-manager.js
  • 影响: CCW Tools 工作空间/全局更新按钮可能无响应
  • 根本原因: 使用内联 onclick 属性,函数不在全局作用域
  • 修复位置:
    • Line 239: Codex 安装按钮
    • Lines 424, 430: 工作空间/全局更新按钮
    • Lines 437, 443: 工作空间/全局安装按钮
    • Lines 1397-1413: 新增健壮的事件监听器

已修复的文件

D:\Claude_dms3\ccw\src\templates\dashboard-js\components\mcp-manager.js
  - Line 960: API 端点修正 (/api/mcp-add-global-server)
  - Line 1024: API 端点修正 (/api/mcp-add-global-server)

D:\Claude_dms3\ccw\src\templates\dashboard-js\views\mcp-manager.js
  - Line 239: onclick → data-action (Codex)
  - Line 424: onclick → data-action (update workspace)
  - Line 430: onclick → data-action (update global)
  - Line 437: onclick → data-action (install workspace)
  - Line 443: onclick → data-action (install global)
  - Line 1352: installMcpToProject → copyMcpServerToProject
  - Line 1397-1413: 新增 CCW Tools 事件监听器
  - Line 1847: installMcpToProject → copyMcpServerToProject

🔧 修复方案详解

方案 1: API 端点统一

// 修复前
fetch('/api/mcp-add-global', { ... })  // ❌ 404 Not Found

// 修复后
fetch('/api/mcp-add-global-server', { ... })  // ✅ 匹配后端路由

方案 2: 函数名称修正

// 修复前
await installMcpToProject(serverName, serverConfig);  // ❌ ReferenceError

// 修复后
await copyMcpServerToProject(serverName, serverConfig);  // ✅ 正确函数

方案 3: 事件处理重构

<!-- 修复前: 内联 onclick依赖全局作用域 -->
<button onclick="updateCcwToolsMcp('workspace')">Update</button>  <!-- ❌ -->

<!-- 修复后: data-action 属性,健壮的事件监听 -->
<button data-action="update-ccw-workspace">Update</button>  <!-- ✅ -->
// 新增事件监听器
const ccwActions = {
  'update-ccw-workspace': () => updateCcwToolsMcp('workspace'),
  'update-ccw-global': () => updateCcwToolsMcp('global'),
  'install-ccw-workspace': () => installCcwToolsMcp('workspace'),
  'install-ccw-global': () => installCcwToolsMcp('global'),
  'install-ccw-codex': () => installCcwToolsMcpToCodex()
};

Object.entries(ccwActions).forEach(([action, handler]) => {
  const btn = document.querySelector(`button[data-action="${action}"]`);
  if (btn) {
    btn.addEventListener('click', async (e) => {
      e.preventDefault();
      await handler();
    });
  }
});

🧪 测试场景

现在应该正常工作的按钮

1. CCW Tools 工作空间安装/更新

  • 位置: MCP Manager → CCW Tools MCP 卡片
  • 按钮: "Install to Workspace" / "Update in Workspace"
  • 测试步骤:
    1. 选择至少一个工具(勾选复选框)
    2. 点击按钮
    3. 预期结果: 提示 "Installing/Updating CCW Tools MCP to workspace..."
    4. 成功后显示: "CCW Tools installed/updated to workspace (N tools)"

2. CCW Tools 全局安装/更新

  • 位置: MCP Manager → CCW Tools MCP 卡片
  • 按钮: "Install Globally" / "Update Globally"
  • 测试步骤:
    1. 选择至少一个工具
    2. 点击按钮
    3. 预期结果: 提示 "Installing/Updating CCW Tools MCP globally..."
    4. 成功后显示: "CCW Tools installed/updated globally (N tools)"

3. Codex 安装/更新

  • 位置: MCP Manager → Codex 模式 → CCW Tools MCP 卡片
  • 按钮: "Install" / "Update"
  • 测试步骤:
    1. 切换到 Codex 模式
    2. 选择工具
    3. 点击按钮
    4. 预期结果: 成功提示

4. 从其他项目安装

  • 位置: MCP Manager → Available from Other Projects 部分
  • 按钮: 服务器卡片上的文本按钮或图标按钮
  • 测试步骤:
    1. 找到其他项目的 MCP 服务器
    2. 点击 "Install to Project" 或文件夹图标
    3. 预期结果: 弹出配置类型选择对话框
    4. 选择后成功安装

📋 验证清单

在重启服务后,请逐项验证:

  • CCW Tools 工作空间安装 - 点击按钮有反应,控制台无错误
  • CCW Tools 工作空间更新 - 修改工具选择后可更新
  • CCW Tools 全局安装 - 安装到 ~/.claude.json
  • CCW Tools 全局更新 - 可更新全局配置
  • Codex 模式安装 - 安装到 ~/.codex/config.toml
  • 从其他项目安装 - 文本按钮工作正常
  • 从其他项目安装 - 图标按钮工作正常
  • 浏览器控制台 - 无 ReferenceError 或 404 错误

🚀 启动测试

1. 重启服务(必须)

cd D:\Claude_dms3\ccw
npm run dev

2. 打开浏览器控制台

  • 访问: http://localhost:3456
  • F12 打开开发者工具
  • 切换到 Console 标签

3. 逐个测试按钮

按照上述测试场景,逐个点击按钮并观察:

  • 浏览器控制台输出
  • Network 标签中的 API 请求
  • 页面上的成功/失败提示

📊 API 端点映射表

前端调用 后端路由 状态
/api/mcp-add-global-server /api/mcp-add-global-server 匹配
/api/mcp-copy-server /api/mcp-copy-server 匹配
/api/codex-mcp-add /api/codex-mcp-add 匹配
/api/mcp-config /api/mcp-config 匹配
/api/mcp-toggle /api/mcp-toggle 匹配

🐛 如果仍有问题

检查项:

  1. 服务是否重启? 必须重启才能加载新代码
  2. 浏览器缓存?Ctrl+Shift+R 强制刷新
  3. 控制台错误? 检查是否有 JavaScript 错误
  4. Network 请求? 查看 API 请求的状态码和响应

需要提供的调试信息:

  • 浏览器控制台完整错误信息(截图或文本)
  • Network 标签中失败请求的详情
  • CCW View 服务端控制台输出
  • 点击的具体按钮和操作步骤

📈 修复效果

问题 修复前 修复后
全局安装按钮 404 错误 正常工作
全局更新按钮 404 错误 正常工作
工作空间安装 ⚠️ 可能失效 稳定工作
工作空间更新 ⚠️ 可能失效 稳定工作
从其他项目安装 ReferenceError 正常工作
Codex 安装 ⚠️ 可能失效 稳定工作

🎯 技术细节

Gemini 分析发现

Gemini AI 通过执行流程追踪和代码模式分析,准确识别了:

  1. 前后端 API 端点不一致
  2. 函数名称拼写错误导致的引用失败
  3. JavaScript 作用域问题导致的事件处理失效

修复优势

  • 健壮性提升: 使用 addEventListener 替代内联 onclick
  • 可维护性: 函数名称统一,减少混淆
  • 调试友好: 所有 API 调用端点与后端完全匹配

📝 修复日志

  • 2025-12-17: 初始问题报告 - 安装按钮无响应
  • 2025-12-17: 发现 API 端点不匹配问题(问题 1
  • 2025-12-17: Gemini 分析发现额外 2 个问题(问题 2、3
  • 2025-12-17: 完成所有修复并重新编译
  • 2025-12-17: 创建完整的测试和调试指南