🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

MCP 录制回放 bleakbelladonnals/dsh-echo

DeepSeek 客户端
bleakbelladonnals64 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

录制一次 MCP 调用,离线确定性回放并校验契约

28.5/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/bleakbelladonnals/dsh-echo.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/25·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/05·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 64 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令发起外部网络请求
查看扫描证据(共 15 处,展示前 15 条)
  • 发起网络请求
    src/client.ts:189
    const res = await this.request("initialize", {
  • 发起网络请求
    src/client.ts:212
    res = await this.request("server/discover");
  • 发起网络请求
    src/client.ts:225
    res = await this.request("server/discover");
  • 发起网络请求
    src/client.ts:270
    const res = await this.transport.request(frame, this.timeoutMs);
  • 发起网络请求
    src/client.ts:290
    const res = await this.request(method, cursor ? { cursor } : {});
  • 发起网络请求
    src/http-replay.ts:360
    const answer = await client.request(frame.method, frame.params);
  • 执行外部命令固定命令
    src/proxy.ts:83
    const pid = execFileSync("lsof", ["-ti", `tcp:${port}`, "-sTCP:LISTEN"], { encoding: "utf8" }).trim().split("\n")[0];
  • 执行外部命令固定命令
    src/proxy.ts:85
    const cmd = execFileSync("ps", ["-p", pid, "-o", "command="], { encoding: "utf8" }).trim();
  • 发起网络请求
    src/proxy.ts:176
    const upstream = await fetch(opts.url, {
  • 执行外部命令来自配置/变量
    src/record.ts:68
    const child = spawn(cmd, args, { stdio: ["pipe", "pipe", "inherit"] });
  • 发起网络请求
    src/replay.ts:428
    const res = await client.request(frame.method, frame.params);
  • 执行外部命令来自配置/变量
    src/transport.ts:97
    this.child = spawn(cmd, args, { stdio: ["pipe", "pipe", "inherit"] });
  • 发起网络请求
    src/transport.ts:234
    const res = await fetch(this.url, {
  • 发起网络请求
    src/transport.ts:283
    await fetch(this.url, {
  • 发起网络请求
    src/verify.ts:218
    live = await client.request(pair.request.method, pair.request.params);
扫描于 2026/11/5(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 录制MCP调用
  • 离线确定性回放
  • 校验契约

记录一次 MCP,在 DeepSeek Harness 里安全回放。

README

由 DeepSeek 最新模型翻译生成
面向 DeepSeek Harness 的非官方 MCP 确定性录制与回放插件。 真实调用只录一次;无需凭据和网络即可离线回放;每次命中、差异与契约变化都能在 DSH 中检查。 English ·项目主页 · GitHub Action ·安装 ·快速开始 ·架构 ·安全边界 [!NOTE] DSH Echo 不隶属于 DeepSeek,也未获得 DeepSeek 或上游作者的官方背书。 v0.1 可从源码安装,但尚未发布到 npm。 为什么是 DSH Echo? MCP 工具背后往往连接 API、数据库和真实业务系统。直接用它们测试 Agent,容易受到网络、凭据、费用、限流和副作用影响。DSH Echo 在 DSH 与 MCP Server 之间放入一盘 Cassette:先对真实世界录制一次,以后在本地确定性回放。
展开完整文档(README 剩余 1 节)
面向 DeepSeek Harness 的非官方 MCP 确定性录制与回放插件。
真实调用只录一次;无需凭据和网络即可离线回放;每次命中、差异与契约变化都能在 DSH 中检查。

English ·项目主页 · GitHub Action ·安装 ·快速开始 ·架构 ·安全边界

[!NOTE]
DSH Echo 不隶属于 DeepSeek,也未获得 DeepSeek 或上游作者的官方背书。
v0.1 可从源码安装,但尚未发布到 npm。

为什么是 DSH Echo?

MCP 工具背后往往连接 API、数据库和真实业务系统。直接用它们测试 Agent,容易受到网络、凭据、费用、限流和副作用影响。DSH Echo 在 DSH 与 MCP Server 之间放入一盘 Cassette:先对真实世界录制一次,以后在本地确定性回放。

| 录下真实调用 | 安全离线回放 |
| stdio 与 Streamable HTTP/SSE | 按方法和参数确定性匹配 |
| 追加式、版本化 JSONL | 未录制调用默认失败关闭 |
| 落盘前默认脱敏 | 普通回放不启动真实 Server |
| 保存结果与耗时 | miss 显示最近参数差异 |

| 看清发生了什么 | 守住工具契约 |
| Session 范围内的 Web 检查器 | Contract Snapshot |
| 参数、结果、hit/miss 状态 | Schema Drift 分类 |
| 精简 Trajectory 标注 | Breaking Change CI 门禁 |
| 进入 UI 前二次脱敏 | Fixture 导出前 Secret Scan |

GitHub Marketplace Action

可以把同一套健康检查、安全检查和契约检查直接接入 Pull Request。这个 Composite Action 会启动指定的 MCP Server、对比已提交的契约快照、写入 Job Summary,并在每次重新运行时更新同一条 PR 评论。

~~~yaml
- uses: bleakbelladonnals/dsh-echo@v0.1.0
with:
server-command: node dist/server.js
snapshot-file: mcp-contract.snapshot.json
fail-on: breaking

在 GitHub Marketplace 查看 DSH Echo MCP Contract Gate。

安装到 DSH

环境要求:

- Node.js 22.19+(Node 22 系列)或 Node.js 24+
- 兼容性基线:DeepSeek Harness 0.1.1-rc.2
- 一个全新或明确指定的 DSH Profile

推荐先安装到隔离 Profile:

~~~bash
git clone https://github.com/bleakbelladonnals/dsh-echo.git
cd dsh-echo
npm ci
npm run build
npm pack --ignore-scripts

export DSH_HOME="$(mktemp -d)"
dsh plugin --profile web add ./dsh-echo-0.1.0.tgz
dsh --profile web --no-open

进入任意 Session 后,可以看到 Echo / 录制回放 页签。安装时
bindings: [],所以仅安装插件不会拦截或改变任何 MCP Server。

卸载:

~~~bash
dsh plugin --profile web remove dsh-echo

只有在你明确要安装到日常 DSH Profile 时,才应省略临时 DSH_HOME。

录制与离线回放

录制 stdio MCP Server,默认开启脱敏:

~~~bash
dsh-echo record -o .dsh-echo/demo.cassette.jsonl -- \
node examples/fixture/server.mjs

离线回放同一段交互:

~~~bash
dsh-echo replay .dsh-echo/demo.cassette.jsonl

未录制请求返回 JSON-RPC -32601 并以非零状态退出,且不会启动真实 Server。只有同时显式指定 --on-miss passthrough 和真实 Server 命令时,才允许实时回退。

Streamable HTTP 通过 loopback 端点工作:

~~~bash
录制
dsh-echo record -o .dsh-echo/http.cassette.jsonl \
--http http://127.0.0.1:3000/mcp \
--listen 127.0.0.1:6402

回放
dsh-echo replay .dsh-echo/http.cassette.jsonl \
--listen 127.0.0.1:6402

连接一个 DSH MCP Server

当前 DSH 会直接构造 MCP Transport,因此 DSH Echo 使用可撤销 Profile Overlay,不修改 DSH 源码,也不原地编辑你的源 Profile:

~~~bash
dsh-echo profile patch \
--source ./cordis.yml \
--out ./cordis.echo.yml \
--recovery ./cordis.echo.recovery.json \
--root ./.dsh-echo \
--server-row mcp-demo \
--cassette-id demo \
--cassette demo.cassette.jsonl \
--mode replay

生成的 replay 行不含原 Server 命令;record/passthrough 使用 argv 数组,不拼接 Shell 字符串。源文件保持不变。恢复记录可写入另一个文件:

~~~bash
dsh-echo profile restore \
--recovery ./cordis.echo.recovery.json \
--out ./cordis.restored.yml

应用前请人工检查生成的 YAML。v0.1 支持 HTTP record/replay,有意不提供 HTTP passthrough。

DSH 中能看到什么

对于名称形如 mcp__<serverName>__<tool> 的工具,Host 插件会写入精简的 tool/result.meta.dshCassette 引用。完整结果留在 Cassette 内,不会重复写入 Session Log。

Echo / 录制回放 页签展示:

- Cassette ID、模式、Transport、格式与脱敏状态;
- 每次交互的参数、结果、耗时与来源;
- recorded、hit、miss、passthrough、error;
- miss 与最近录制调用之间的结构化差异;
- Contract / Schema Drift 和 Snapshot 操作;
- 当前 Session/Trajectory 中的关联标注。

Host API 只接受已配置的 Cassette ID,不接受任意路径。所有 Cassette 与 Snapshot 必须位于指定 Root 下,数据进入浏览器前还会再次脱敏。

契约门禁

先保存基线:

~~~bash
dsh-echo snapshot --stdio "node examples/fixture/server.mjs" \
-f mcp-contract.snapshot.json

删除工具或出现 Breaking Schema Change 时让 CI 失败:

~~~bash
dsh-echo snapshot --check --fail-on breaking \
--stdio "node examples/fixture/server.mjs" \
-f mcp-contract.snapshot.json

仓库 CI 自带会删除工具并新增必填参数的 Fixture,并断言门禁确实失败。

安全导出 Fixture

原始录制默认位于 Git 已忽略的 .dsh-echo/。导出是独立、显式的步骤:

~~~bash
dsh-echo export-fixture \
.dsh-echo/demo.cassette.jsonl \
--root ./fixtures \
--out demo.cassette.jsonl

命令会拒绝 Root 之外的路径,并在发现 Secret 时阻止复制。扫描通过仍需人工复核:基于模式的自动脱敏是纵深防御,不等于“可以直接公开”。

架构

~~~mermaid
flowchart LR
DSH["DeepSeek Harness"] --> Adapter["DSH Echo Profile Adapter"]
Adapter --> Core["Record / Replay Core"]
Core --> Live["真实 MCP Server"]
Core --> Tape[("版本化 Cassette")]
Tape --> Core
Core --> Session["Session 标注"]
Session --> UI["Echo Web 检查器"]

通用 Transport 引擎仍可独立作为 CLI 使用;DSH 适配集中在 src/dsh/。生命周期、信任边界和集成取舍见架构说明。

开发与验收

~~~bash
npm ci
npm run lint
npm run typecheck
npm test
npm run test:e2e
npm run audit:pack
npm pack --dry-run --ignore-scripts

当前共 463 项测试,覆盖真实 stdio 录制/回放、无 Server 回放 Tripwire、Profile 恢复、路径限制、UI 二次脱敏、契约漂移、生命周期清理和 Tarball 审计。验收只使用临时 HOME、loopback、隔离 npm cache 和隔离 DSH Profile,不读写真实用户配置。

- 完整验收记录
- 安全模型
- 上游审计
- DSH 集成方案对比
- Fixture Server

上游与许可证

DSH Echo 派生自 ivermin1123/mcp-cassette,导入 Commit 为 9e48be26cbf1f7fca5edde142673a9b102a25e86 (上游 0.4.0)。保留的引擎提供 stdio、Streamable HTTP/SSE、匹配、脱敏、Contract Diff、安全 Lint 和 Vitest 集成。

精确归属与修改记录见 UPSTREAM.md 和 NOTICE。
项目采用 Apache-2.0 许可证。
预览分享卡片长什么样 ↓bleakbelladonnals/dsh-echo
分享 · DeepSeek Harness Hub
bleakbelladonnals/dsh-echo

录制一次 MCP 调用,离线确定性回放并校验契约

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部