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

MCP 桥接器 lvoliverrrr/chat2dsh

MCP
lvoliverrrr16 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

把云端 AI 的指令转给本机 dsh 执行

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 16 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读取剪贴板或密钥环境变量
查看扫描证据(共 5 处,展示前 5 条)
  • 读取密钥环境变量
    src/config.mjs:66
    DEEPSEEK_API_KEY: process.env.DEEPSEEK_API_KEY || '',
  • 执行外部命令固定命令
    src/dsh.mjs:26
    const globalRoot = execFileSync('npm', ['root', '-g'], {
  • 执行外部命令来自配置/变量
    src/dsh.mjs:93
    const child = spawn(invocation.command, invocation.args, {
  • 执行外部命令来自配置/变量
    src/dsh.mjs:152
    return execFileSync(invocation.command, invocation.args, {
  • 读取密钥环境变量
    src/dsh.mjs:177
    apiKeyInEnv: Boolean(process.env.DEEPSEEK_API_KEY),
扫描于 2026/11/2(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

ChatGPT / 任意 MCP 客户端 → 本机 DeepSeek Harness。云端模型派活,本机 dsh 干活。

README

由 DeepSeek 最新模型翻译生成
chat2dsh AI 助手正在读这个仓库?先看 AGENTS.md。 那里写了哪条路线适合你的用户、哪些事实不能编、以及面对初学者该怎么带。 把 ChatGPT(或任意 MCP 客户端)接到你自己电脑上的 DeepSeek Harness:云端模型负责想和指挥,本机 DSH 负责真正改文件、跑命令。 操作与执行分离——聊天模型负责规划,本机 DSH 智能体负责执行。 ChatGPT 网页版 / 任意 MCP 客户端 ← 操作层:派活、定约束、看结果 │ OpenAI Secure MCP Tunnel / HTTPS / stdio ▼ chat2dsh(本仓库的轻量桥) ← 桥接层:目录白名单、工具暴露、输出回传 │ 本机调用 ▼ DeepSeek Harness (dsh headless) ← 执行层:读改文件、跑命令、跑测试 先选路线,别两头做 | | 路线 A:Codex Bridge | 路线 B:本仓库 chat2dsh | | 形态 | 桌面 App(Swift,含安装包) | 一个 Node 脚本,无 GUI | | 接 ChatGPT 网页版 | 可以,走 OpenAI Secure MCP Tunnel | 不可以(见下方限制) | | 接 Claude Code / Cursor / Codex CLI | 可以 | 可以 |
展开完整文档(README 剩余 1 节)
chat2dsh

AI 助手正在读这个仓库?先看 AGENTS.md。 那里写了哪条路线适合你的用户、哪些事实不能编、以及面对初学者该怎么带。

把 ChatGPT(或任意 MCP 客户端)接到你自己电脑上的 DeepSeek Harness:云端模型负责想和指挥,本机 DSH 负责真正改文件、跑命令。

操作与执行分离——聊天模型负责规划,本机 DSH 智能体负责执行。

ChatGPT 网页版 / 任意 MCP 客户端 ← 操作层:派活、定约束、看结果 │ OpenAI Secure MCP Tunnel / HTTPS / stdio ▼ chat2dsh(本仓库的轻量桥) ← 桥接层:目录白名单、工具暴露、输出回传 │ 本机调用 ▼ DeepSeek Harness (dsh headless) ← 执行层:读改文件、跑命令、跑测试

先选路线,别两头做

| | 路线 A:Codex Bridge | 路线 B:本仓库 chat2dsh |
| 形态 | 桌面 App(Swift,含安装包) | 一个 Node 脚本,无 GUI |
| 接 ChatGPT 网页版 | 可以,走 OpenAI Secure MCP Tunnel | 不可以(见下方限制) |
| 接 Claude Code / Cursor / Codex CLI | 可以 | 可以 |
| 审批 / 任务记录 / 多智能体 | 有 | 无 |
| 适合 | 主要目标是「在 ChatGPT 里遥控本机」 | 主要目标是「让本机智能体被任意 MCP 客户端调用」 |

如果目标就是 ChatGPT 网页版遥控本机,用路线 A,见 docs/chatgpt-setup.md(含 Tunnel、Workspace、DSH 接入的完整步骤和踩坑清单)。本仓库的代码不是那条路的必需品。

不想自己啃文档? 把 docs/agent-prompt.md 里那段提示词整段发给一个 AI(ChatGPT、Claude 都行),它会先问你几个问题,然后一个阶段一个阶段带你配,每步都告诉你验收标准。那是这份 README 的口语版。

路线 B 的限制,先说清楚:ChatGPT 的自定义 MCP 服务器只接受 HTTPS + OAuth 或「无认证」两种方式,没有地方填 Bearer token。所以本仓库这个桥直接挂到 ChatGPT 上,要么走无认证的公网隧道(谁拿到 URL 谁能执行你电脑上的代码),要么你自己在前面补一层 OAuth。两种情况都不该按默认做法用。它真正的用途是给本机或局域网里的 MCP 客户端当 dsh 适配器,以及当你要自己实现一个带 OAuth 的 ChatGPT 网关时,作为被包在里面的那一层。

路线 B 快速开始

1. 装 DeepSeek Harness(需要 Node ^22.19.0 或 >=24)
npm install -g @deepseek-ai/dsh

2. 装本仓库
git clone https://github.com/lvoliverrrr/chat2dsh.git
cd chat2dsh
npm install

3. 配一个 token 和白名单目录
cp .env.example .env
node -e "console.log(require('crypto').randomBytes(24).toString('hex'))" # 填进 CHAT2DSH_TOKEN
再把 CHAT2DSH_ROOTS 改成你要让 agent 干活的项目目录

3.5 填 DSH 的 key 打开 .env,把 DEEPSEEK_API_KEY= 那行取消注释填上。不填也能跑,但 dsh_run 会返回 MISSING_CREDENTIAL —— 桥是好的,只是 dsh 没有模型可用。

4. 起服务(HTTP 模式)
npm start
[chat2dsh] v0.1.0 listening on http://127.0.0.1:7317/mcp
[chat2dsh] dsh: 0.2.0-rc.2 (.../@deepseek-ai/dsh/lib/bin.js)
[chat2dsh] roots: C:\Users\me\projects\demo
[chat2dsh] auth: bearer token required

5. 自检
npm run smoke # 握手 + tools/list + dsh_health + 越界拦截
npm run smoke -- --with-run # 再加一次真实 dsh 任务(要花一次模型调用)

dsh 执行本身需要 API Key。用官方的:platform.deepseek.com/api_keys 拿 key,填在 DSH Web 的 Models 页(写进 ~/.dsh/.credentials.yaml),或者直接作为环境变量 DEEPSEEK_API_KEY 传给本桥。

工具

桥只暴露两个工具,够用就行。

dsh_health

只读。返回 dsh 是否可达、版本、Node 版本、DSH_HOME、配置的工作区白名单、凭据文件是否存在。先调它,确认桥接层是活的。

dsh_run

把一个自包含任务交给本机 DSH 执行,阻塞到结束,返回 stdout、stderr 尾部、退出码、耗时。

| 参数 | 必填 | 说明 |
| task | 是 | 完整任务描述。必须自包含——headless 是一次性会话,智能体看不到你和它的上一轮对话,也问不了追问。把目标、涉及文件、约束、期望输出都写进去。 |
| cwd | 否 | 绝对路径,必须落在 CHAT2DSH_ROOTS 白名单内。省略则用白名单第一项。 |
| timeout_ms | 否 | 墙钟上限。默认 300000,硬上限 1800000。 |

任务在 cwd 里执行,DSH 用启动目录作为它的工作区根。

接到 MCP 客户端

Claude Code

bash
claude mcp add-json chat2dsh -s user '{"type":"stdio","command":"node","args":["<abs>/chat2dsh/src/server.mjs","--stdio","--root","<workspace>"]}'

Cursor / 任意 JSON 配置的客户端 json {
"mcpServers": {
"chat2dsh": {
"command": "node",
"args": ["<abs>/chat2dsh/src/server.mjs", "--stdio", "--root", "<workspace>"],
"env": { "DEEPSEEK_API_KEY": "..." }
}
}
}

HTTP 模式(本机或局域网,Bearer 认证) bash
node src/server.mjs --http --port 7317 --token <secret> --root <workspace>

POST http://127.0.0.1:7317/mcp
Authorization: Bearer <secret>

无状态实现:每个 POST 各自独立,不维护 session,GET/DELETE 返回 405。GET /healthz 是不带凭据的存活探测,只回版本,不回任何敏感信息。

实测记录

2026-10-16,Windows 11 + Node v22.22.2 + DSH v0.2.0-rc.2,npm run smoke:

PASS server boots and binds loopback — bridge 0.1.0, dsh 0.2.0-rc.2 PASS dsh is reachable from the bridge process — resolved PASS unauthenticated request is rejected — HTTP 401 PASS MCP handshake over Streamable HTTP — session 89ed50d7 PASS tools/list returns the bridge surface — dsh_health, dsh_run PASS dsh_health reports a real dsh runtime — dsh 0.2.0-rc.2 @ .../@deepseek-ai/dsh/lib/bin.js PASS dsh_run refuses a cwd outside the roots — cwd "..." is outside the allowed roots SKIP dsh_run live task — pass --with-run to spend one real LLM call

7/7 checks passed

同一台机器上直接跑 dsh headless "<task>"(未配 key),14 秒返回:

dsh: MISSING_CREDENTIAL: llm-deepseek: no API key for provider route "deepseek-official";
store DEEPSEEK_API_KEY through the credentials service (the web Models page writes it),
or export DEEPSEEK_API_KEY in the launching environment

公网链路(同一台机器,cloudflared tunnel --url http://127.0.0.1:7317,quick tunnel):

$ curl https://<random>.trycloudflare.com/healthz
{"ok":true,"bridge":"0.1.0","dshVersion":"0.2.0-rc.2","authRequired":true}

$ curl -X POST https://<random>.trycloudflare.com/mcp -d '{"method":"tools/list",...}'
{"error":"unauthorized"} # HTTP 401,没带 token

$ curl -X POST https://<random>.trycloudflare.com/mcp \
-H 'authorization: Bearer <token>' -d '{"method":"tools/list",...}'
event: message
data: {"result":{"tools":[{"name":"dsh_health",...},{"name":"dsh_run",...}]}}

也就是说 公网 HTTPS → Cloudflare 边缘 → 隧道 → 本机桥 → dsh 解析 这一段是实测通的。
顺带一个环境发现:本机(校园网)的 DNS 不解析 .trycloudflare.com,nslookup 报 Non-existent domain,换阿里 DNS 才拿到 Cloudflare 边缘 IP。你要是在类似网络里用自建隧道,先确认 DNS 这一层,或者干脆走官方 Secure MCP Tunnel。

三件事说清楚了:桥接层、dsh 进程链路、公网可达性都真跑过;唯一没跑的是带 API Key 的真实模型调用——那一步需要你自己的 key,npm run smoke -- --with-run 一跑就见分晓。

暴露到公网(可选,先读下面「安全」那节) bash

临时域名,不用注册账号

cloudflared tunnel --url http://127.0.0.1:7317

它会打印 https://<random>.trycloudflare.com

你的 MCP 端点就是它后面加 /mcp

三件事先知道:

- 这个域名每次重启都变,而且没有可用性保证。要稳定域名用命名隧道,要接 ChatGPT 就用官方 Secure MCP Tunnel。
- 本机 DNS 可能根本解析不了 .trycloudflare.com。 实测某校园网 DNS 直接返回 Non-existent domain,换 223.5.5.5 才解析到 Cloudflare 边缘 IP,再用 curl --resolve host:443:IP 才通。排障时先单独验 DNS 这一层,别把它当成隧道没起来。
- 公网暴露意味着谁拿到 URL 又拿到 token,谁就能在这台机器上执行代码。只给信任的人,用完就关。

安全

这个桥的存在意义就是让远端在本机执行代码,所以边界要自己划清楚:

- 默认只绑 127.0.0.1。绑到别的地址会打印警告,别无视它。
- HTTP 模式没有 token 就不启动。除非你显式 --no-auth,而且要清楚那意味着同网段谁能访问谁就能执行。
- CHAT2DSH_ROOTS 是白名单,不是建议。越界的 cwd 会被拒绝(自检里有这一条)。别把整个用户目录或盘符根目录写进去。
- 别把带 token 的隧道 URL 发出去。ChatGPT 那条路请用官方 Secure MCP Tunnel,不要自己拿 trycloudflare 的临时地址裸奔。
- 输出默认截断在 64 KB(CHAT2DSH_MAX_OUTPUT),超时上限 30 分钟。

目录结构

chat2dsh/
├── README.md 开发者视角:代码怎么跑、实测记录 ├── AGENTS.md 给 AI 的入口 —— AI 进仓库先读这个 ├── SECURITY.md 威胁模型、部署必做项、不提供的保证 ├── llms.txt 给 LLM 的文档索引 ├── src/ │ ├── server.mjs MCP server:stdio + Streamable HTTP,两个工具 │ ├── dsh.mjs 调 dsh:入口解析、spawn、超时、截断 │ └── config.mjs 参数与环境变量、白名单校验 ├── scripts/ │ └── smoke.mjs 端到端自检(真起进程、真握手) ├── docs/ │ ├── chatgpt-setup.md 路线 A:ChatGPT 网页版 + Codex Bridge 完整配置 │ └── agent-prompt.md 交给 AI 的部署任务书(让它带你一步步配) ├── .env.example └── package.json

为什么不用 shell 调 dsh

dsh 在 Windows 上是 .cmd shim,任务文本要经过 cmd.exe 的引号转义规则。所以 src/dsh.mjs 解析出 npm 包的 JS 入口(@deepseek-ai/dsh/lib/bin.js),直接 node <entry> <profile> <task>。任务作为真正的 argv 元素传递,不经过 shell,没有转义地狱,也没有注入面。解析不到入口时才退回 shell 模式。

License

MIT
预览分享卡片长什么样 ↓lvoliverrrr/chat2dsh
分享 · DeepSeek Harness Hub
lvoliverrrr/chat2dsh

把云端 AI 的指令转给本机 dsh 执行

回到顶部