dsh-mcp-lazy

DSH PLUGIN浏览器与联网

仓库 wings1848/dsh-mcp-lazy · npm dsh-mcp-lazy

浏览器与联网 L5 · 运行验证通过 安全审查:低风险 可信度:金 可安装插件
安装这个插件

为 DeepSeek Harness 提供懒加载 MCP 网关:只向模型暴露一个稳定代理工具,MCP 服务器首次调用才启动、空闲即退出,工具元数据缓存到磁盘,大幅节省 token。

一句话选型结论

按资料字段整理

dsh-mcp-lazy 是浏览器与联网类的 DSH 可安装插件,验证等级 L5 · 运行验证通过,安全审查为低风险,列出 5 项功能,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类浏览器与联网 收录类型可安装插件 验证等级L5 · 运行验证通过 安全审查低风险
验证等级 L5 L5 · 运行验证通过
GitHub 星标 6 复刻 0 · 未关闭 issue 1
最近更新 2026-10-11 创建于 2026-09-10
README 11.7 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add dsh-mcp-lazy@0.4.1
  1. 1
    确认版本与运行环境

    兼容的 DSH 版本为 0.2.0-rc.2 等 8 个,Node.js 要求 >=22.18.0;版本不匹配时安装会报错。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本0.2.0-rc.2 等 8 个版本版本不匹配时安装会报错
Node.js 要求>=22.18.0来自仓库 package.json 的 engines 字段
前置依赖@deepseek-ai/cordis@^4.0.2、@deepseek-ai/dsh-subprocess@^0.1.5-rc.1 || ^0.2.0-rc.1 等 5 个需要同时安装的同级依赖
npm 包名dsh-mcp-lazy可用 npm view 查看包信息

能做什么

5 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-mcp-lazy:DeepSeek Harness 的懒加载 MCP 网关

  • 单一代理工具替代 N 个 MCP schema
  • 服务器按需启动、空闲自动退出
  • 工具元数据磁盘缓存,搜索不启动进程
  • 内置 adopt 命令迁移旧 MCP 配置
  • 实测节省约 92.8% 工具定义 token

上游标签

deepseekdshdsh-pluginllmmcpmodel-context-protocoltokens

验证等级与安全审查

L5 · 运行验证通过
自动化流程结论,不是人工审核
验证等级L5 · 运行验证通过在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度金综合仓库活跃度与验证结果

上面的结论来自上游最近一次自动化验证(2026-10-08): 同一套检查会在插件发新版后重跑,页面显示的是最新一次的逐项结果。

逐项检查结果

L1 · 已找到 ✓ 通过
  • L1.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L2 · 结构化 ✓ 通过
  • L2.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L3 · 安装规范 ✓ 通过
  • L3.1_INSTALL_COMMAND_PARSED 安装命令已解析 方式:安装规范解析
  • L3.2_DSH_VERSION_DECLARED DSH 版本已声明 方式:DSH 版本声明
L4 · 安装已测 ✓ 通过
  • L4.1_INSTALL_EXECUTED_CONFINED 受限沙盒内执行安装 方式:沙盒安装执行
  • L4.2_INSTALL_SUCCESS 沙盒安装成功 方式:沙盒安装执行
  • L4.3_ARTIFACT_CONFIRMED 安装产物已确认 方式:沙盒安装执行
  • L4.4_RESOLVED_ARTIFACT 安装版本已解析 方式:沙盒安装执行
L5 · 运行已测 ✓ 通过
  • L5.1_INSTALL_PASSED_SANDBOXED 沙盒安装通过 方式:沙盒安装执行
  • L5.2_WEB_BOOT_READY Web 启动就绪 方式:Web 启动
  • L5.3_HTTP_SERVED HTTP 服务响应 方式:HTTP 请求
  • L5.4_PLUGIN_INVENTORY_ACTIVE 插件清单中已激活 方式:插件清单查询

风险详情

  • 审查结论 通过
  • 结论说明 vet 静态分析未发现可疑行为,判定为干净(clean)。
  • 风险计数 严重 0 / 高 0 / 中 0
  • 风险详情 未发现严重或警告级问题。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L5:安装和运行都在沙盒里跑通过,装完能直接用的概率高。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。
  • 标注了兼容的 DSH 版本(0.2.0-rc.2 等 8 个),按版本装不容易报错。
  • 列出了 5 项功能,能直接看出它解决什么问题。

先想清楚的地方

  • 需要同时装好同级依赖,漏装会启动失败。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在浏览器与联网场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-mcp-lazy当前 L5 · 运行验证通过 低风险 6 0.2.0-rc.2 等 8 个 有
dsh-our-free-model L3 · 安装规范通过 低风险 8,796 未标注 有
dsh-web L3 · 安装规范通过 低风险 8,549 未标注 无
BrowserSkill L4 · 沙盒安装通过 低风险 8,456 未标注 有
dsh-pocket L5 · 运行验证通过 低风险 1,656 0.2.0-rc.2 等 12 个 有
Browser4 L4 · 沙盒安装通过 中风险 1,152 未标注 有

仓库档案

浏览器与联网
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方wings1848仓库 dsh-mcp-lazy · 默认分支 main
分类浏览器与联网network
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言TypeScript仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue6 / 0 / 1收录时的数值,非实时
创建 / 更新2026-09-10 · 2026-10-11最后推送 2026-10-11
本站收录2026-09-13首次进入本站目录的时间

README 全文

11.7 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-mcp-lazy





A lazy MCP gateway for DeepSeek Harness. It puts one
tool in front of the model instead of N MCP tool schemas: servers start on first use, idle
out again, and their tool metadata is cached on disk so search and describe never spawn
anything.

Why

@deepseek-ai/dsh-mcp-client connects every configured server at startup and registers every
one of its tools as a native tool. As its own README puts it, tool descriptions and input
schemas "enter every request while the tools are registered". A handful of servers therefore
costs thousands of tokens on every request and one resident child process each — whether or
not the model ever calls them.

This plugin keeps the model-facing surface at exactly one tool whose schema never changes,
discovers tools on demand from a disk cache, and only spawns a server when a call needs it.

The numbers

Measured against chrome-devtools-mcp@1.6.0 (29 tools), both sides rendered the same way —
JSON bytes of the tool definitions, then four bytes per token:

per request
native registration 21252 bytes ≈ 5313 tokens
this gateway 1525 bytes ≈ 381 tokens
saved 92.8%

The gateway figure is constant: configuring ten more servers does not move it, because their
schemas are read on demand rather than sent every request.

The honest counterweight. The gateway costs a fixed 1525 bytes, so it wins only when a
server's rendered tool definitions exceed that. The bundled fixture offers 7 small tools and
the saving drops to 1.7%. A server with a couple of tiny tools would make the gateway a net
loss. Measure your own before assuming:

pnpm run measure:savings                                          # local fixture
node scripts/measure-token-savings.mjs --npx

Install

dsh plugin --profile  add dsh-mcp-lazy

Works with the DeepSeek Harness 0.1.5-rc and 0.2.0-rc lines (verified against
0.2.0-rc.2); the package's peer ranges declare exactly that.

That installs the package into the profile and registers its bundle patch, which inserts the
mcp-lazy row. Then give it your servers in the profile's cordis.patch.yml:

- id: mcp-lazy
config:
servers:
- serverName: chrome
transport: stdio
command: npx
args: ['-y', 'chrome-devtools-mcp@1.6.0']
lifecycle: lazy
- serverName: docs
transport: streamable-http
url: http://127.0.0.1:3000/mcp

Restart the profile. Every field is documented in docs/configuration.md.

Moving servers off @deepseek-ai/dsh-mcp-client

Every writer of MCP configuration in this ecosystem emits a @deepseek-ai/dsh-mcp-client row:
the config-manager panel hardcodes that package name, @hyzyn/dsh-codegraph writes a managed
row, and a hand-written config follows the same convention. Such a row registers each MCP tool
as a real tool, so its schemas enter every request — and a server listed in both places
cancels the saving this plugin exists for, with no error and nothing to notice. (The mcp({})
status output does warn you — for any server the other plugin serves natively, whether or not
this one has it too — which is how you usually find out.)

adopt does the move for you:

dsh-mcp-lazy-adopt                 # dry run: prints the plan, writes nothing
dsh-mcp-lazy-adopt --write         # applies it, with a timestamped backup of each file

Or, without leaving the session, as a slash command:

/mcp-adopt                         # dry run
/mcp-adopt apply                   # writes

The command drives the same CLI, so the plan, the backups and the write are one code path; a
successful apply is followed by a re-plan whose result is shown to you, so the answer to "did
it work?" is evidence rather than an assurance. It still requires the human to type it: nothing
runs at plugin startup.

It reads what is actually mounted (dsh --profile --dump-config, so all four patch layers
are composed), marks each original row disabled: true in place, and appends the server to
this plugin's servers list. Nothing else in the file is touched — comments, blank lines and
!!js expressions are preserved byte for byte — and a row it cannot move safely is reported
with a reason instead of being guessed at. Run it while the host is stopped: the web profile
reloads its patch layer live, and dsh-config-manager rewrites the same file from its own
state.

Check the blast radius before you apply. The native row usually lives in the home patch,
which every profile reads, while this plugin's row lives in one profile's patch. Disabling the
former therefore takes that server away from every other profile as well — and those profiles
have no gateway to receive it, so they simply lose the capability. The plan names them:

⚠ the row being disabled lives in the home layer ~/.dsh/cordis.patch.yml, which every profile reads.
3 other profile(s) do not mount dsh-mcp-lazy, so they would lose codegraph with no replacement:
default, dsh-tui, headless.
Mount dsh-mcp-lazy in those profiles, or move the row into web's own layer, if they need it.

If any of them need the server, mount this plugin there too (or move the row) before applying.

A server that does move arrives with only the fields this plugin implements. Two of the other
plugin's fields are not implemented here — reconnect and failOnStartupError — and
carrying them over is an error rather than a no-op, so a row that sets either one is reported as
unsupported-field and left exactly where it is: no half-move, and no load failure from a
setting that would look configured and do nothing. A misspelled field name is reported the same
way. The per-row id is dropped, because it names the loader row rather than the server.

What the model sees

One tool, always the same 11 parameters:

mcp({ search: "screenshot" })          # find a tool — reads the cache, starts nothing
mcp({ describe: "take_screenshot" })   # full argument schema
mcp({ tool: "take_screenshot" })       # call it — this is what spawns the server
mcp({ tool: "echo", server: "docs" })  # disambiguate a name two servers share
mcp({ connect: "chrome" })             # connect and refresh the cache, without calling
mcp({ instructions: "chrome" })        # the server's own usage notes
mcp({})                                # status: tool count, connection state, cache age

Seven of the 11 are the actions above. The other four shape a search and are
never needed for anything else:

Parameter Meaning Default Limit
regex Treat search as a regular expression rather than literal text. false —
includeSchemas Include each match's parameter summary in the result. true —
limit How many matches to return. 12 40; clamped into 1–40, never an error
offset Skip this many matches, for paging through a long result. 0 —

That one tool is the whole model-facing surface by default. directTools is
the opt-in that promotes chosen server tools into real native tools instead —
see docs/configuration.md
for what it accepts, and why the default is the cheap choice.

Documentation

docs/configuration.md every field, the four lifecycle modes, output ceiling
docs/troubleshooting.md failed servers, cold cache, name resolution
docs/development.md build, test, why link-dsh is mandatory
docs/design.md why the plugin is shaped this way: the constant tool surface, the cache, the lifecycle, envFrom, and the adopt command
docs/parity-pi-mcp-adapter.md module-by-module comparison against pi-mcp-adapter v2.33.0, and the defects it turned up

Known limitations

The v1 boundary, stated plainly:

  • Tools only. No MCP resources, prompts, sampling, or elicitation. Only tools/list_changed
    is subscribed.
  • No OAuth. Authentication is a plaintext headers entry or an environment variable.
  • Image and audio results are not forwarded. They are projected to a one-line metadata
    entry (type and byte count). Forwarding pixels needs attachment storage this plugin does
    not implement.
  • No approval gate. MCP calls follow your DSH permission preset.
  • No config interop. It reads DSH-native config only; it will not import .mcp.json,
    Cursor, Claude Code, Codex, or VS Code server lists.
  • The regex guard is deliberately narrow. A 256-character cap plus a nested-quantifier
    check, which does not catch overlapping alternation like (a|aa)+ or polynomial
    backtracking like a*a*a*b. A full analyser would mean a second runtime dependency.
  • No SSE or unix-socket transports. stdio and streamable-http only.
  • npx is not resolved to the underlying binary, so an npx-launched server costs one
    extra Node parent process.
  • A secret passed through args lands in the child's argv, where ps and
    /proc//cmdline can read it. That path exists only because some servers accept a token
    no other way; envFrom alone keeps the value out of argv.

Development

pnpm install
pnpm test          # builds, relinks the peer packages, runs 390 tests
pnpm run check     # typecheck, lint, build, then type-check the test sources

See CONTRIBUTING.md.

Star history

License

MIT — see LICENSE. The connection supervisor, transport factory, and
environment-scrubbing rules derive from @deepseek-ai/dsh-mcp-client; the single-proxy-tool
gateway, metadata cache, and weighted search ranking derive from pi-mcp-adapter. Both are
MIT; their notices are reproduced in THIRD_PARTY_NOTICES.md.

常见问题

9 问
答案由本站依据条目字段整理,不引用上游原文
dsh-mcp-lazy 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add dsh-mcp-lazy@0.4.1` 即可。对应的 npm 包名是 `dsh-mcp-lazy`。

dsh-mcp-lazy 的验证等级是什么意思?

L5 · 运行验证通过。在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来

dsh-mcp-lazy 安全吗?

低风险。vet 静态分析未发现可疑行为,判定为干净(clean)。

dsh-mcp-lazy 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-mcp-lazy 支持哪些 DSH 版本?

上游记录的兼容版本包括 0.2.0-rc.2、0.2.0-rc.1、0.1.7-rc.2、0.1.7-rc.1、0.1.7-alpha.2、0.1.6-alpha.2、0.1.6-alpha.1、0.1.5-rc.2。

dsh-mcp-lazy 需要什么运行环境?

Node.js >=22.18.0;需要同时安装 @deepseek-ai/cordis@^4.0.2、@deepseek-ai/dsh-subprocess@^0.1.5-rc.1 || ^0.2.0-rc.1、@deepseek-ai/dsh-tools@^0.1.5-rc.1 || ^0.2.0-rc.1、@deepseek-ai/schemastery@^3.18.2、zod@^4.0.0。环境不满足时安装会失败,建议先确认本机版本。

dsh-mcp-lazy 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

dsh-mcp-lazy 有哪些功能?

单一代理工具替代 N 个 MCP schema、服务器按需启动、空闲自动退出、工具元数据磁盘缓存,搜索不启动进程、内置 adopt 命令迁移旧 MCP 配置、实测节省约 92.8% 工具定义 token。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

同名或近似条目

2 条
不同作者的仓库分开列,请确认你要装的是哪一个
浏览器与联网
按星标排序,可作替代方案

dsh-our-free-model

dsh-our-free-model

在 DeepSeek Harness 中装上这个 DSH plugin,无需登录、注册或填 API Key,即可直接调用 DeepSeek

L3 · 安装规范通过 8,796 星

dsh-web

dsh-web

侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。

L3 · 安装规范通过 8,549 星

BrowserSkill

BrowserSkill

BrowserSkill 的 DeepSeek Harness 浏览器自动化桥接插件,通过原生浏览器工具控制可见的 Chrome 和 Edg

L4 · 沙盒安装通过 8,456 星

dsh-pocket

dsh-pocket

DSH Pocket 让 DeepSeek Harness 装进口袋:电脑跑 dsh web,手机扫码即实时同步访问(局域网+公网),人在外

L5 · 运行验证通过 1,656 星

Browser4

Browser4

L4 · 沙盒安装通过 1,152 星

agentrq

agentrq

L4 · 沙盒安装通过 1,140 星

wings1848 的其它插件

1 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 2026-10-08。