DamonKoy/dsh-plugins--packages-dsh-mcp-client-v2 ↗★ 0
dsh-mcp-client-v2
Enhanced MCP client for DeepSeek Harness: paginated tool discovery, non-blocking startup, and a mcp_tool_search model tool, with hand-rolled stdio / streamable-http transports and bounded exponential reconnect. · DSH MCP 客户端 v2:分页工具发现、非阻塞启动、工具搜索模型工具,自带 stdio / streamable-http 传输与指数退避重连。
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:DamonKoy/dsh-plugins#fd97e01fb1c26454f27310dd42a6f8d7b66e8e29&path:packages/dsh-mcp-client-v2说明文档
阅读完整 README ↗dsh-mcp-client-v2
DeepSeek Harness 的增强版 MCP 客户端,对标 Codex 0.147 的 MCP 2026-07-28 协议
增强:分页工具发现、非阻塞启动、mcp_tool_search 工具搜索模型工具。
English | 中文
功能
- 分页工具发现:
tools/list的nextCursor游标链逐页拉全(lib/paginate.js为纯函数、可单测),带去重与 20 页上限防死循环。单页放不下的工具不会丢失。 - 非阻塞启动:
apply()立即返回,服务器连接与工具同步在后台进行;某个 MCP 服务器不可达或慢不会阻塞宿主启动与首轮对话。连接状态(connecting/ready/failed)通过mcp-client-v2/statusRPC 暴露,工具注册完成后自动出现在模型工具集。 mcp_tool_search模型工具:列出所有已连接服务器的工具(公开名、原始名、 description 前 120 字符),可按关键词(名称或描述子串、不区分大小写)过滤。 调用mcp__工具前用它了解服务器能力。- 自带传输实现(不依赖 MCP SDK):
stdio:node:child_processspawn 子进程,stdin/stdout 逐行 JSON-RPC; stderr 作为诊断日志输出。streamable-http:Node 23 全局 fetch,POST JSON,带MCP-Protocol-Version/Mcp-Session-Id头;application/json与text/event-stream(最小 SSE 解析)响应都处理。
- 有限重连:指数退避(500ms 起步翻倍、上限 30s、最多 10 次),与官方 v1 策略
一致;重连成功后重新分页同步工具并整代替换;
notifications/tools/list_changed通知触发免重连的再同步。 - 官方同款命名:工具注册为
mcp____(按 DeepSeek 函数名约束归一化,需要时追加确定性哈希后缀),与官方@deepseek-ai/dsh-mcp-client一致。
安装
dsh plugin --profile web add link:~/dsh-plugins/packages/dsh-mcp-client-v2
重启 dsh web。与官方 v1(每个服务器一个 Cordis 行)不同,v2 从一个配置文件读取
所有服务器。
配置
文件 ~/.dsh/dsh-mcp-client-v2.json:
{
"servers": [
{
"serverName": "github",
"transport": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_TOKEN": "" },
"cwd": "",
"toolCallTimeoutMs": 60000,
"reconnect": { "enabled": true, "initialDelayMs": 500, "maxDelayMs": 30000, "maxAttempts": 10 }
},
{
"serverName": "web",
"transport": "streamable-http",
"url": "http://localhost:3000/mcp",
"headers": { "Authorization": "Bearer xxx" },
"toolCallTimeoutMs": 60000
}
],
"searchEnabled": true
}