DeepSeek Harness Hub
← 返回列表

MCP 惰性代理ben7am1n/dsh-mcp-proxy

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

只注册两个工具,按需发现并调用 MCP 服务

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/14 · 已提供中文文档

为 DeepSeek Harness 提供上下文开销低的惰性 MCP 访问

综合分
26.6
GitHub 分
26.6
用户评分
★ Stars
0
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add ben7am1n/dsh-mcp-proxy
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-system-prompt@deepseek-ai/dsh-tools
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-mcp-proxy

为 DeepSeek Harness 提供上下文开销低廉的 MCP 访问。

随附的 dsh-mcp-client 会在 ctx.tools 上注册每个已配置服务器的每一个工具,因此几个 MCP 服务器就会把数百个 JSON schema 塞进每个请求的系统提示词中——无论模型是否真的调用过其中一个。

本插件无论你配置了多少个服务器,都只注册两个工具,并以惰性方式访问这些服务器。常驻提示词开销与可用 MCP 工具的数量无关,保持恒定。

安装

dsh plugin --profile web add dsh-mcp-proxy

然后通过覆盖该行来声明你的服务器(随附的行中没有任何服务器——参见信任)。

模型看到的内容

| 工具 | 用途 |
|---|---|
| mcp_discover | 按关键词搜索工具目录;返回每个命中项的服务器、名称、描述和参数名 |
| mcp_call | 按服务器和名称调用一个工具,参数原样传递 |

目录会缓存到磁盘上,因此 mcp_discover 可以在冷启动时无需连接任何东西即可作答,并且在某个服务器暂时宕机时仍能继续作答。

行为方式

- 启动时不建立任何连接。 服务器会在首次发现或首次调用时才被联系。
- 热连接会被复用,并在静默 idleDisconnectMs 后关闭。并发调用共享同一次握手。
- 一个不可达的服务器会降低发现能力,而不是使其失败:模型会得到已响应的服务器,以及每个未响应服务器的具名原因。
- 工具报告失败属于成功结果,带有 isError: true,因此 Code Mode 调用方根据该标志分支,而不是解析文本。只有传输和协议失败才是工具错误。
- 已移除服务器的目录条目会在加载时被清理,因此被重命名的服务器不再宣传没有任何东西能调用的工具。
- 损坏的缓存文件会以空状态启动,而不是阻止 harness 启动——它是派生缓存,不是事实来源。
- 释放时会关闭每个连接并清除每个定时器。

配置

- id: mcp-proxy
name: dsh-mcp-proxy
config:
cachePath: !!js dshHomePath('mcp-proxy/catalog.json')
catalogTtlMs: 86400000
idleDisconnectMs: 300000
connectTimeoutMs: 30000
callTimeoutMs: 60000
discoverLimitDefault: 15
discoverLimitMax: 50
servers:
- name: github
transport: stdio
command: npx
args: ['-y', '@modelcontextprotocol/server-github']
env:
GITHUB_TOKEN: !!js process.env.GITHUB_TOKEN

- name: internal
transport: streamable-http
url: http://localhost:3000/mcp
headers:
Authorization: !!js Bearer ${process.env.MCP_TOKEN}

| 字段 | 默认值 | 含义 |
|---|---|---|
| servers | [] | 此部署可访问的服务器。名称格式为 [A-Za-z0-9_-]{1,32} 且必须唯一 |
| cachePath | —(必填) | 缓存每个服务器工具列表的 JSON 文件 |
| catalogTtlMs | 86400000(1 天) | 缓存的目录在下次发现时被重新获取的时长 |
| idleDisconnectMs | 300000(5 分钟) | 空闲多久后关闭热连接 |
| connectTimeoutMs | 30000 | 单次 MCP 握手的时限 |
| callTimeoutMs | 60000 | 单次 callTool 请求的时限 |
| discoverLimitDefault | 15 | 模型省略 limit 时返回的命中数 |
| discoverLimitMax | 50 | 硬性上限,无论模型请求多少 |

信任

servers 故意以空值发布。每个 MCP 服务器命令都是在代理沙箱之外运行的可信可执行代码,因此任何包都不得代表用户启用其中之一。随附的 harness 对 dsh-mcp-client 做出了相同的选择。

本插件不添加自己的审批关卡。像对待任何其他工具一样对 mcp_call 设关卡——一个 tools/pre-execute 监听器、ctx.tools.guard(),或权限预设——这样策略就集中在一处,而不是按传输方式分叉。

与 dsh-mcp-client 并行运行

受支持,而且往往是正确的设置:将你希望其工具原生可见(这样模型无需发现往返即可调用它们)的两三个服务器提升为 dsh-mcp-client 行,并把长尾留在本代理之后。工具名称不会冲突——dsh-mcp-client 注册 mcp____,本插件只注册 mcp_discover 和 mcp_call。

权衡

当模型尚不知道工具名称时,代理会让它多一次往返,并将工具的完整 JSON schema 隐藏在参数名称之后。这是刻意的交换:恒定的提示成本,代价是首次使用时的发现延迟。如果你有一个带四个工具的 MCP 服务器,dsh-mcp-client 更合适。

值得了解的替代方案

harness 自身用于渐进式披露的惯用法是 ctx.tools.restrict(),它按代理屏蔽已注册的工具集。该路径为可见子集保留完整 schema,但仍需在启动时连接以进行枚举。本插件改为选择代理形态,以便在模型请求之前不建立任何连接——当部署配置了十几个很少使用的服务器时,这一特性至关重要。

开发

pnpm install --ignore-workspace
pnpm run typecheck
pnpm test
pnpm run build

测试套件针对真实的 MCP stdio 服务器(tests/fixture-server.mjs)通过真实的 SDK 传输运行,因此它覆盖握手、列表、调用、工具级故障、不可达服务器和目录持久化,而不依赖任何第三方服务器。

许可证

MIT

先前技术

节省上下文的代理想法来自 Pi 生态系统中的 pi-mcp-adapter(MIT)。这是针对 Harness 扩展点的独立实现,与其不共享任何代码;它涵盖惰性连接和代理工具核心,而非 pi-mcp-adapter 的 OAuth 流程、工具提升或 /mcp 配置面板。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群