# ds-mcp-bridge **Repository Path**: doc5/ds-mcp-bridge ## Basic Information - **Project Name**: ds-mcp-bridge - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-28 - **Last Updated**: 2026-05-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DeepSeek MCP Bridge 通过 MCP 协议让 Claude Code 直接操控 [chat.deepseek.com](https://chat.deepseek.com/),实现 AI 编程助手 + DeepSeek 专家模式的联动。 ## 工作原理 ``` ┌─────────────────────────────────────────────────────────┐ │ Windows Edge 浏览器 │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ DeepSeek Tab #1 │ │ DeepSeek Tab #2 │ ... Tab N │ │ │ (分配给会话 A) │ │ (分配给会话 B) │ (空闲池中) │ │ └────────┬─────────┘ └────────┬─────────┘ │ │ └──────────┬─────────┘ │ │ │ WebSocket x N (ws://127.0.0.1:9527)│ │ │ WSL2 端口转发 │ └──────────────────────┼──────────────────────────────────┘ │ ┌──────────────────────┼──────────────────────────────────┐ │ WSL / Linux │ │ ┌───────────────────┴─────────────────────┐ │ │ │ BridgeServer(连接池) │ │ │ │ - browserPool: [tab3, ...] 空闲标签页 │ │ │ │ - relayToBrowser: { A→tab1, B→tab2 } │ │ │ │ - 分配 / 回收 / 排队 │ │ │ └─────┬───────────────────┬───────────────┘ │ │ │ stdio │ WebSocket (relay) │ │ ┌─────┴──────┐ ┌────────┴────────┐ │ │ │ MCP 进程 A │ │ MCP 进程 B │ │ │ │ (桥主进程) │ │ (relay 模式) │ │ │ └─────┬──────┘ └────────┬────────┘ │ └────────┼──────────────────┼─────────────────────────────┘ │ stdio │ stdio ┌────────┼──────────────────┼─────────────────────────────┐ │ ┌─────┴──────┐ ┌────────┴────────┐ │ │ │Claude Code A│ │ Claude Code B │ ... 更多会话 │ │ │ 项目 X │ │ 项目 Y │ │ │ └────────────┘ └─────────────────┘ │ └─────────────────────────────────────────────────────────┘ ``` ### 连接池设计 - **浏览器标签页 = 资源**。开 N 个 `chat.deepseek.com` → 连接池有 N 个实例 - **Claude Code 启动** → 从池中分配一个标签页,独占使用 - **Claude Code 退出** → 归还标签页到池中,等待下一个会话 - **池中无空闲** → 新会话收到 `"No browser available"` 错误,多开标签页即可 - **会话隔离** → 每个 Claude 会话独占一个 DeepSeek 对话,互不干扰 ## 安装步骤 ### 第一步:安装 Tampermonkey 1. 打开 Edge 浏览器 2. 访问 [Tampermonkey 扩展页面](https://microsoftedge.microsoft.com/addons/detail/tampermonkey/iikmkjmpaadaobahmlepeloendndfphd) 3. 点击「获取」安装扩展 或者访问 [tampermonkey.net](https://www.tampermonkey.net/) 下载对应浏览器版本。 ### 第二步:安装用户脚本 1. 点击 Edge 工具栏的 Tampermonkey 图标 → **管理面板** 2. 点击 **已安装脚本** 标签旁的 **+** 按钮(新建脚本) 3. 用文本编辑器打开本项目中的 `userscript/deepseek-bridge.user.js` 4. **全选复制**文件内容,粘贴到 Tampermonkey 编辑器中 5. 按 `Ctrl+S` 保存 6. 确认脚本开关为**启用状态**(绿色) ``` 脚本信息: ┌─────────────────────────────────────────┐ │ @name DeepSeek MCP Bridge │ │ @match https://chat.deepseek.com/*│ │ @grant unsafeWindow │ │ @grant GM_notification │ │ @run-at document-end │ └─────────────────────────────────────────┘ ``` ### 第三步:验证脚本运行 1. 在 Edge 打开 https://chat.deepseek.com/ 2. 看 Tampermonkey 图标 — 应该显示红色数字角标(表示有脚本在此页面运行) 3. 按 `F12` 打开开发者工具 → Console 标签 4. 不应有持续的红字报错(偶尔的 `ERR_CONNECTION_REFUSED` 在 MCP Server 启动前是正常的) > **提示**:想支持 N 个并发 Claude Code 会话?直接多开 N 个 DeepSeek 标签页即可,连接池自动管理。 ### 第四步:安装 MCP Server ```bash # 进入项目目录 cd /path/to/deepseek-mcp # 安装依赖 npm install ``` ### 第五步:配置 Claude Code #### 方式一:全局配置(推荐,所有项目可用) ```bash claude mcp add --scope user deepseek \ /path/to/deepseek-mcp/node_modules/.bin/tsx \ /path/to/deepseek-mcp/server/index.ts ``` 配置文件会写入 `~/.claude.json`,所有项目自动加载。 #### 方式二:项目级配置(仅当前项目) 在项目**根目录**下创建 `.mcp.json`: ```json { "mcpServers": { "deepseek": { "command": "/path/to/deepseek-mcp/node_modules/.bin/tsx", "args": ["/path/to/deepseek-mcp/server/index.ts"] } } } ``` 在同一目录下的 `.claude/settings.json` 中添加: ```json { "enableAllProjectMcpServers": true } ``` > **注意**:`/path/to/deepseek-mcp` 必须替换为你的实际项目路径。如果是 WSL 环境,用 WSL 内的绝对路径(如 `/www/wwwroot/cl/deepseek`)。 ### 第六步:验证整体连通 1. **确保 Edge 打开了 https://chat.deepseek.com/** 且用户脚本已启用 2. **重启 Claude Code**(启动时会自动加载 MCP Server) 3. 在 Claude Code 中,说:**"调用 deepseek_status 检查"** 4. 应该返回: ```json { "browser_connected": true, "message": "Browser connected and ready..." } ``` 如果返回 `browser_connected: false`,检查: - DeepSeek 页面是否打开 - Tampermonkey 脚本是否启用 - WSL2 端口转发是否正常 ## 可用工具 | 工具 | 说明 | 何时使用 | |------|------|----------| | `deepseek_status` | 健康检查 | **每次使用前先调用**,确认浏览器已连接 | | `deepseek_chat` | 发送消息 | 生成代码、解释概念、回答问题、头脑风暴 | | `deepseek_new_conversation` | 新建对话 | 开始新任务,避免上下文污染 | | `deepseek_switch_conversation` | 切换对话 | 回到之前的讨论 | | `deepseek_list_conversations` | 列出对话 | 查看所有对话,获取 ID 以便切换 | | `deepseek_get_reply` | 获取回复 | 重新读取之前的回复 | | `deepseek_regenerate` | 重新生成 | 对回复不满意时重新生成 | | `deepseek_toggle_search` | 搜索开关 | 需要实时信息时打开联网搜索 | | `deepseek_toggle_think` | 深度思考 | 复杂逻辑/数学时开,简单问题关 | | `deepseek_toggle_expert` | 专家模式 | 切换专家模式/快速模式 | | `deepseek_upload_file` | 上传文件 | 上传代码/文档让 DeepSeek 分析 | ## 使用示例 ``` 用户: 帮我写一个快排算法 Claude: [调用 deepseek_chat message="用 TypeScript 写一个快速排序算法"] 返回: { text: "function quickSort...", think: "这是经典的...", tokens: 234 } 用户: 新建一个会话,问一个完全不同的问题 Claude: [调用 deepseek_new_conversation] [调用 deepseek_chat message="什么是 Docker 的多阶段构建?"] 用户: 回到刚才的快排对话 Claude: [调用 deepseek_list_conversations] 返回: [{ id: "abc123", title: "快速排序算法" }, ...] [调用 deepseek_switch_conversation conversation_id="abc123"] [调用 deepseek_chat message="加上单元测试"] ``` ## 常见问题 **Q: 返回 `browser_connected: false`** A: 检查 Edge 是否打开了 `https://chat.deepseek.com/`,Tampermonkey 脚本是否启用。 **Q: Claude Code 看不到 deepseek_* 工具** A: - 全局配置:确认 `claude mcp add --scope user ...` 执行成功(写入 `~/.claude.json`) - 项目配置:确认 `.mcp.json` 和 `.claude/settings.json` 在同一目录,路径是否正确 - 重启 Claude Code **Q: 多开几个 Claude Code 会话会互相影响吗?** A: 不会。连接池为每个会话分配独立的浏览器标签页,对话完全隔离。如需 N 个并发会话,开 N 个 DeepSeek 标签页即可。 **Q: 提示 "No browser available"** A: 连接池中所有标签页都已被占用。再开一个新的 `chat.deepseek.com` 标签页即可。 **Q: 回复只包含思考过程没有正文** A: 更新用户脚本到最新版。当前版本通过 DS-markdown 解析正确分离了思考和正文。 **Q: 提示 `Page navigated away`** A: 正常现象 — 切换对话或新建对话时页面会跳转,稍候重试即可。 **Q: WSL2 环境中 Edge 连不上 WSL 的 WebSocket** A: WSL2 默认会转发 localhost 端口。如果不行,在 Windows PowerShell 运行: ```powershell netsh interface portproxy add v4tov4 listenport=9527 connectaddress= connectport=9527 ``` ## 开发 ```bash npm install npm run dev # tsx 热重载 npm test # 运行测试 npm run build # 编译 TypeScript ```