把 DSH 会话与目标接入本地 MCP 端点
30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/14 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add sanshanya/dsh-dot-mcp该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 20 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 24 处,展示前 24 条)
- 读取本地文件src/bridge.ts:252
const parsed = JSON.parse(readFileSync(manifest, 'utf8')) as { version?: string }; - 读取本地文件src/bridge.ts:271
return JSON.parse(readFileSync(new URL('buildmeta.json', import.meta.url), 'utf8')) as { - 读取本地文件src/code-identity.ts:57
return (readdirSync(root, { recursive: true }) as string[]) - 读取本地文件src/code-identity.ts:73
const stat = statSync(join(root, name)); - 读取本地文件src/code-identity.ts:94
const stat = statSync(absolute); - 读取本地文件src/code-identity.ts:98
entries.push({ path, digest: createHash('sha256').update(readFileSync(absolute)).digest('hex') }); - 读取本地文件src/credentials.ts:97
if (!existsSync(file)) continue; - 读取本地文件src/credentials.ts:100
text = readFileSync(file, 'utf8'); - 写入本地文件src/log.ts:35
mkdirSync(dir, { recursive: true }); - 写入本地文件src/log.ts:52
appendFileSync(file, `${new Date().toISOString()} [${level}] ${line}\n`); - 读取本地文件src/message-receipts.ts:40
const parsed = JSON.parse(readFileSync(this.file, 'utf8')) as { receipts?: unknown }; - 写入本地文件src/message-receipts.ts:60
mkdirSync(dirname(this.file), { recursive: true }); - 写入本地文件src/message-receipts.ts:65
writeFileSync(tmp, JSON.stringify({ version: 1, receipts: kept }), { mode: 0o600 }); - 写入本地文件src/message-receipts.ts:66
renameSync(tmp, this.file); - 读取本地文件src/message-receipts.ts:75
try { return statSync(this.file).isFile(); } catch { return false; } - 读取本地文件src/paths.ts:23
if (!existsSync(root)) return true; - 读取本地文件src/paths.ts:35
while (!existsSync(current)) { - 读取本地文件src/request-id-store.ts:28
const parsed = JSON.parse(readFileSync(this.file, 'utf8')) as { records?: unknown }; - 写入本地文件src/request-id-store.ts:49
mkdirSync(dirname(this.file), { recursive: true }); - 写入本地文件src/request-id-store.ts:51
writeFileSync(tmp, JSON.stringify({ version: 1, records: entries }), { mode: 0o600 }); - 写入本地文件src/request-id-store.ts:52
renameSync(tmp, this.file); - 读取本地文件src/temp-resources.ts:88
exists: (path) => existsSync(path), - 删除本地文件递归src/temp-resources.ts:90
rmSync(path, { recursive: true, force: true }); - 执行外部命令固定命令src/temp-resources.ts:93
spawnSync('git', ['worktree', 'remove', '--force', path], {
扫描于 2026/11/3(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-agent-default-model@deepseek-ai/dsh-llm@deepseek-ai/dsh-session-persistence@deepseek-ai/dsh-session-projection@deepseek-ai/dsh-session-projection-cache@deepseek-ai/dsh-tool-todo@deepseek-ai/dsh-user-approval@deepseek-ai/dsh-user-questions@deepseek-ai/dsh-workspace@deepseek-ai/dsh-agent给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
展开完整介绍(139 字)↓
MCP 桥接,把 DeepSeek Harness(DSH)的会话、原生目标、审批和结果通过官方协议暴露给 MCP 客户端:21 个冻结工具,仅限回环的 HTTP 加 DNS 重绑定防护,不带内置凭据。桥接只负责连接,会话、智能体、工具、审批和工作区安全模型仍由 DSH 掌管。
README
由 DeepSeek 最新模型翻译生成dsh-dot-mcp
把 DSH 暴露成一个本地 MCP 端点。 ChatGPT 创建任务、继续会话、启动并更新原生目标、处理审批、读取结果;DSH 保留智能体循环、工具、技能、子代理、沙箱、审批、目标生命周期和工作区安全模型。
这座桥连接两端。它不替代 DSH,不修改 DSH 核心,也不把 DSH 的模型流量绕道 ChatGPT。
这是什么
一个 MCP 服务器,绑定 127.0.0.1:<port>(默认 3456),没有 token,也没有认证头,在四个平面上提供 21 个工具:
- 会话 —— 创建、列出、查看、继续、取消。
- 原生目标 —— 每个目标动词都只是薄薄一层映射,指向宿主自己的 GoalService:dsh_create_goal → create,dsh_revise_goal → edit(通过 expected_revision 做修订 CAS),dsh_resume_goal → resume,dsh_pause_goal → pause,dsh_stop_goal → clear。等待循环会报告 goal_outcome ∈ ended|no_goal|timeout|action_required,外加原生目标的原始视图。
展开完整文档(README 剩余 1 节)
dsh-dot-mcp 把 DSH 暴露成一个本地 MCP 端点。 ChatGPT 创建任务、继续会话、启动并更新原生目标、处理审批、读取结果;DSH 保留智能体循环、工具、技能、子代理、沙箱、审批、目标生命周期和工作区安全模型。 这座桥连接两端。它不替代 DSH,不修改 DSH 核心,也不把 DSH 的模型流量绕道 ChatGPT。 这是什么 一个 MCP 服务器,绑定 127.0.0.1:<port>(默认 3456),没有 token,也没有认证头,在四个平面上提供 21 个工具: - 会话 —— 创建、列出、查看、继续、取消。 - 原生目标 —— 每个目标动词都只是薄薄一层映射,指向宿主自己的 GoalService:dsh_create_goal → create,dsh_revise_goal → edit(通过 expected_revision 做修订 CAS),dsh_resume_goal → resume,dsh_pause_goal → pause,dsh_stop_goal → clear。等待循环会报告 goal_outcome ∈ ended|no_goal|timeout|action_required,外加原生目标的原始视图。 - 人在回路 —— 宿主 GUI 缺席时,审批和提问原样停住,交给远程驱动处理,再通过 dsh_approve / dsh_answer_question 落定;桥自己不保留任何策略。 - 工作区边界 —— 每个工作区一个可变会话,再加上让重试安全的 request-id 映射。 本仓库是 v0.7.0(未发布),目标 DSH 0.2.0-rc.2,peer 和 dev 依赖都锁定到该依赖图。目录结构、模块归属和线上词汇表见 ARCHITECTURE.md;真实边界各层断言的 21 个冻结工具名只存在于一处:test/integration/frozen-wire.mjs。 安装(开发树,link:) npm run build dsh plugin --profile web add /path/to/this/tree 配置档把 dsh-dot-mcp 固定为 link: 依赖,所以重新构建本仓库即可刷新它;宿主必须重新组装(重载/重启)才能加载新代码。 配置 | 键 | 默认值 | 含义 | | transport | streamable-http | streamable-http 或 stdio | | host / port | 127.0.0.1 / 3456 | MCP HTTP 绑定(强制回环;非回环会被拒绝) | | resultMaxChars / resultMaxItems | 8000 / 50 | 工具结果上限 | | sessionMaxItems / sessionMaxChars | 20 / 4000 | 会话历史上限 | | logLevel | info | 桥日志详细程度 | | autoApproveEscalations | false | 对桥管理的会话,直接批准每一次沙箱升级请求,授予工具所请求的模式(通常是 danger-full-access),而不是把它停住等 dsh_approve/GUI。见下文「自动批准升级」。 | 自动批准升级 autoApproveEscalations: true 是无人值守模式:没有任何东西等待决定,所以 dsh_approve 永远看不到待处理的请求,挂接的 GUI 客户端也拿不到卡片。有两个后果值得直说: - 它只覆盖确实存在的请求。一次从未请求更宽模式仍会被沙箱直接拒绝(拒绝发生在沙箱内部,没有请求——桥接层根本看不到)。要想完全没有拒绝,把会话的权限预设设为 danger-full-access;那是宿主侧的开关,不是桥接层的。 - 每次授权都以 warn 记录,并通过 dsh_health.capabilities.autoApproveEscalations 对外公布,这样驱动端就能知道不会有任何请求被挂起。这是桥接层唯一一处自行授权、而非转发的场景;默认关闭。 安全说明 - 无身份验证:任何能访问 127.0.0.1:<port> 的本地进程,都能通过全部 21 个工具驱动 DSH。浏览器侧的防线是 DNS 重绑定防护:它拒绝非回环的 Host 头,也拒绝任何不是无 scheme 回环的入站 Origin,所以恶意网页无法驱动该端点。不要绑定公网接口(服务器会拒绝非回环地址);如果你自己把它放到反向代理或隧道后面,请在前面加上你自己的认证——它没有内置凭据。 - 不擦除敏感信息:工具输出和日志会原样携带调用方/智能体的文本。曾尝试过基于模式匹配的脱敏器,后来移除了——它只是纱门(漏掉了 JWT/ghp_/AKIA,还会误伤 commit SHA),不是边界。不要把凭据喂进智能体输出——不要让智能体 cat .env,也不要打印带 token 的 URL——因为会话打印的任何内容都可能到达你连接的模型服务商。 - 审批原样转发:桥接层不保留自己的风险矩阵、姿态或拒绝列表——宿主自己的 allow/ask/deny 钩子决定哪些请求需要询问,而当宿主 GUI 不在时,每个问题都会通过 dsh_approve 带着原始工具名和命令到达远程驱动端(及其模型)。你以 MCP 客户端身份连接的那一方就是审批权威;不要把你不愿交出该权威的东西连上来。 开发——验证层级 | 层级 | 命令 | 证明什么 | | 单元 | npm test | 针对合成上下文的 161 个测试;快,始终运行 | | 发布 | npm run test:release | 打包当前目录树,把 tarball 加官方 @deepseek-ai/dsh@0.2.0-rc.2 安装到临时目录,断言 tarball 中每个源模块恰好对应一个编译产物(陈旧的 lib/ 幽灵再也无法混入发布),并在那里运行集成通道:真实命令行启动(隔离配置档、真实预设注册表、MCP 创建/读取、宿主网页登录)和真实进程内宿主(Cordis + AgentLoop + JSONL 持久化 + 转发的审批) | | 实时 | BRIDGE_DSH_DIR=/path/to/deepseek-harness npm run test:live | 用打包产物启动真实 harness 检出,并断言对外提供的 21 个工具词汇表 | | 黄金 | 对运行中的测试实例执行 npm run test:golden | 通过真实 MCP 线路驱动全部 21 个冻结工具(真实模型轮次、两条转发通道、原生目标生命周期),只要有任一冻结工具从未被调用就失败 | Golden E2E(真实测试实例,通过 MCP 驱动) 上面各层把被测对象隔离开来。这一层不隔离:它搭起独立的 DSH home,把打包好的插件装进配置档,启动真实命令行,然后完全按 ChatGPT 的方式通过 MCP 线路驱动桥接——真实智能体轮次跑真实模型,审批与提问中继,原生目标生命周期,幂等性,持久化,以及 fail-closed 边界。 1. Build the throwaway instance: own DSH_HOME, reusing the real home's provider credentials + workspace registry, plus its own scratch workspace. G=/tmp/dsh-golden-home mkdir -p $G/profiles/golden $G/storages && chmod 700 $G cp ~/.dsh/.env ~/.dsh/.credentials.yaml $G/ # model access (chmod 600) cp ~/.dsh/storages/workspace.json $G/storages/ # registered workspaces npm pack --pack-destination /tmp # the artifact under test profile: bundles [dsh-base, dsh-web-app, dsh-dot-mcp] + pnpm install of the tarball (file:), a patch copying the provider rows, a patch row overriding the bridge PORT (the shipped patch pins 3456), and a fixture row registering /tmp/golden-workspace. Recipe verified against 0.2.0-rc.2. 2. Boot it. cd <deepseek-harness checkout> DSH_HOME=/tmp/dsh-golden-home node --import tsx/esm apps/cli/src/bin.ts \ --profile golden --host 127.0.0.1 --port 0 --no-open 3. Drive it (BRIDGE_URL / BRIDGE_WORKSPACE_SUFFIX / BRIDGE_DSH_HOME override the defaults). npm run test:golden 这一层以冻结线路覆盖率台账收尾。 它把实际调用的工具与 test/integration/frozen-wire.mjs 对比,只要有冻结工具从未被驱动过就失败,所以「每个工具都被覆盖」是这一层检查出来的属性,而不是一句声明。每条记录要么是 ✔(happy path 已在线路上验证),要么是 ·(只驱动了它的 fail-closed 边界——比如实例拒绝提问时的中继阶段)。最近一次测量:79 pass · 0 fail · 0 skip,21/21 个工具都跑通了 happy path。 读输出时,有三种行为值得了解: - 审批阶段要求智能体显式请求提权(sandbox_permissions):没有这个请求就想扩大写入范围,会被沙箱直接拒绝,根本不会触发审批。闸门决策本身始终由人来做——这一层用 dsh_approve 来应答(先 approve 再 reject),并断言两种结果(批准的那次写入落到真实 home 目录;被拒绝的那次不留下任何文件)。 - 有些阶段需要实例先提问(审批/提问中继),在 danger-full-access 预设下它们会 SKIP 而不是失败:「什么都没问」不是桥接的缺陷,台账随后会说明哪个工具停在了它的 fail-closed 边界上。 - 这一层跟随实例的姿态:当 autoApproveEscalations: true 时(见 Configuration),审批阶段断言没有任何东西挂起、扩大写入依然落地,把 dsh_approve 路径记为 SKIP,而账本标记该工具仅 fail-closed。最近一次实测:开关关闭时 79 通过 · 0 失败 · 0 跳过,开关打开时 70 通过 · 0 失败 · 1 跳过。 License MIT。见 LICENSE。 非官方社区项目。与 OpenAI 或 DeepSeek 无关联,也未获其背书。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
sanshanya/dsh-dot-mcp
把 DSH 会话与目标接入本地 MCP 端点
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,025未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,358已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13938 个插件含 PR 收录与…
★ 350已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7