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

项目级 MCP 桥接 KYinCode/dsh-project-mcp-bridge

DeepSeek Harnessv0.2.1
KYinCode82 天前有提交已提供中文文档扫描:含敏感能力

按项目加载 MCP 服务器,改配置即时生效无需重启

32.5/100
综合分
1
GitHub 星标
87
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-project-mcp-bridge
npm 源 · dsh-project-mcp-bridge 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · dev
暂无时间戳·判据 →
装得上吗[实装验证]✓
静态安装检查通过
未做真实安装
L4 · 真实安装等级说明 →
数据截至 2026/10/27·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 82 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-project-mcp-bridge @ 0.2.1
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/17 16:45:19

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

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

读写/删除本地文件
查看扫描证据(共 4 处,展示前 4 条)
  • 写入本地文件
    index.mjs:83
    logFileReady = mkdir(dirname(LOG_FILE), { recursive: true })
  • 写入本地文件
    index.mjs:84
    .then(() => appendFile(LOG_FILE, line))
  • 写入本地文件
    index.mjs:87
    logFileReady = logFileReady.then(() => appendFile(LOG_FILE, line)).catch(() => {})
  • 读取本地文件
    index.mjs:557
    text = await readFile(configPath, 'utf8')
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

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

功能亮点

  • 按项目加载MCP服务器
  • 配置热重载
  • 自动获取MCP工具

为 DeepSeek Harness 按项目加载 MCP:把 .dsh/mcp.json 丢进项目,会话就自动拿到 MCP 服务器的工具,配置还能热重载。是客户端桥接,不是 MCP 服务器。

README

由 DeepSeek 最新模型翻译生成
dsh-project-mcp-bridge 一句话——让每个项目自己声明要用哪些 MCP 服务器。在项目根目录放一个 .dsh/mcp.json,该项目的所有会话就有了这些服务器的工具(mcp____),改文件即时生效——不用新开会话,不用重启。 它是客户端桥接插件(消费 MCP 服务器)。不是 MCP 服务器,不是 DeepSeek 官方包。 30 秒上手 // 你的项目/.dsh/mcp.json { "mcpServers": { "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"], "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" } } } } 然后,在该项目打开的任何会话里,模型可以直接调用 mcp__github__create_issue 等工具——与 Claude Code、Cursor、VS Code 相同的 mcpServers JSON 结构。 以后再改这个文件,运行中的会话约 1 秒内就会跟上。 安装一次:dsh plugin --profile web add dsh-project-mcp-bridge(重启一次),或见安装章节的免重启开发路径。
展开完整文档(README 剩余 1 节)
dsh-project-mcp-bridge

一句话——让每个项目自己声明要用哪些 MCP 服务器。在项目根目录放一个 .dsh/mcp.json,该项目的所有会话就有了这些服务器的工具(mcp____),改文件即时生效——不用新开会话,不用重启。

它是客户端桥接插件(消费 MCP 服务器)。不是 MCP 服务器,不是 DeepSeek 官方包。

30 秒上手

// 你的项目/.dsh/mcp.json {
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" }
}
}
}

然后,在该项目打开的任何会话里,模型可以直接调用 mcp__github__create_issue 等工具——与 Claude Code、Cursor、VS Code 相同的 mcpServers JSON 结构。
以后再改这个文件,运行中的会话约 1 秒内就会跟上。

安装一次:dsh plugin --profile web add dsh-project-mcp-bridge(重启一次),或见安装章节的免重启开发路径。

工作原理

agent 创建(agent/created) -> 读取 /.dsh/mcp.json -> 逐个服务器条目:
- 若预设/宿主已有同名 serverName 且条目未设 "override": true -> 跳过(日志说明原因)
- 否则做一次性 SCHEMA 同步:连接(stdio spawn 或 streamable-http)+ 列出工具 + 以 mcp____ 注册进 AGENT 层(仅该项目会话可见,优先级:项目 > 预设 > 宿主)
+ 随即关闭 -> 不保留任何连接:空闲会话不占用任何子进程

第一次调用某服务器的工具(execute) -> 该 agent 的 controller 检查自己的按服务器连接 -> 没有 -> 懒连接(日志提示 "connecting...";这就是首次调用延迟)-> 调用 -> 每次调用都重置一个按连接的空闲计时器(默认 5 分钟);到时关闭连接、释放子进程;下次调用自动重连,对模型透明 -> 连接意外死亡(onclose)-> 本 agent 丢弃死连接,下次调用重连——无广播、无共享状态

连接是每 agent 独占、绝不池化:N 个会话调用同一服务器 = N 个独立进程(隔离优先于共享)。从不调用某服务器的会话不占用任何进程。

安装

本包是 profile bundle:用 dsh CLI 安装,无需手动改任何配置文件。

dsh plugin --profile web add dsh-project-mcp-bridge

dsh plugin 会在 profile 目录运行 pnpm,然后自动核对
dsh.profile.bundles:本包声明了 dsh.bundle.patch,会自动加入 profile 的 bundle 层。插件行由包自带的 cordis.patch.yml 提供——*不需要手写任何行。

装完重启一次 dsh web:bundle 层在启动时组合(只有用户补丁层和 settings.yaml 是热重载的)。重启之后,.dsh/mcp.json 的修改全部热生效(见"配置热重载")。

免重启开发路径(热安装)

如果你要反复改这个插件本身、希望改动不重启就生效,可以用用户补丁行安装(而不是 bundle)。行内用包名引用(从 profile 的 node_modules 解析),可移植且热:

cd ~/.dsh/profiles/web
pnpm add dsh-project-mcp-bridge # 装进 node_modules(不触发 reconcile)

然后在 ~/.dsh/profiles/web/cordis.patch.yml 追加:

- insert:
- id: dsh-project-mcp-bridge
name: 'dsh-project-mcp-bridge' # 包名,不是 file:// 路径

用户补丁层热重载(约 4 秒),行会无需重启生效。注意:此路径不要用
dsh plugin add——那会同时注册 bundle,下次重启后产生重复行。日常使用
推荐 bundle 安装;此路径仅用于本机迭代。

项目配置

在项目根目录创建 .dsh/mcp.json(文件存在即 opt-in;没有该文件的项目不受影响):

{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" },
"idleTimeoutMs": 300000
},
"local-api": {
"url": "http://localhost:3000/mcp",
"headers": { "Authorization": "Bearer ${MCP_TOKEN}" },
"override": true
}
}
}

字段(与 dsh-mcp-client 同名)

| 字段 | 传输 | 必填 | 含义 |
| transport | 两者 | — | 推断:有 command → stdio;有 url → streamable-http;两者恰好其一 |
| serverName | 两者 | 是 | 工具命名空间(即 JSON 键);[A-Za-z0-9_-]{1,32} |
| command | stdio | 是 | 要 spawn 的可执行文件 |
| args | stdio | 否 | 参数 |
| env | stdio | 否 | 额外环境变量,合并到清理后的父环境之上 |
| cwd | stdio | 否 | 子进程工作目录(相对路径以项目根为基准) |
| url | http | 是 | MCP 服务器 URL |
| headers | http | 否 | 额外请求头 |
| toolCallTimeoutMs | 两者 | 否 | 单次调用超时(默认 60000) |
| idleTimeoutMs | 两者 | 否 | 空闲断开:连续这么多毫秒无调用即断开(默认 300000 = 5 分钟;0 = 永不空闲断开) |
| override | 两者 | 否 | 即使预设/宿主已提供同名 serverName,也强制使用项目连接(默认 false) |

env/headers 值中的 ${NAME} 占位符从宿主进程环境展开。

与预设/宿主级 MCP 的冲突语义

- 工具注册在 agent 层;分层注册表使同名工具遮蔽预设层与全局层——可见性优先级 项目 > 预设 > 宿主。
- 预设/宿主已提供的 serverName 默认跳过(每个 agent 对该服务只建一份连接);设置 "override": true 强制使用项目连接(接受双连接,项目版胜出)。
- override 不会关掉上层:项目连接是叠加上去的——上层(宿主/预设)连接照常存活;agent 层的项目副本遮蔽同名工具(分层注册表),模型实际调用的是项目连接。工具名不携带来源标记——插件在 override 覆盖了既有上层注册时,日志会写明 shadows upper-layer registration(s); upper connections stay alive;进程数量是另一个验证手段。
- 不同 serverName / 不同工具名天然共存。
- 注意——两种桥,两种哲学:官方 dsh-mcp-client 实例之间(宿主行、预设行)同名 serverName 是进程级唯一,重复会导致挂载失败("pick a unique serverName")——官方桥宁可用失败暴露配置错误,也不用静默遮蔽。本插件的项目配置与上层同名时默认跳过,保证项目会话仍能创建。实际含义:项目 vs 宿主/预设重复 → 跳过(本插件);预设 vs 宿主在 dsh-mcp-client 行之间重复 → 必须改名。

配置热重载

保存 .dsh/mcp.json 会为该项目所有运行中的会话重新解析并全量重建每个会话的项目 MCP 表面:

- 新增服务器 → schema 同步 + 注册工具(运行中会话即时获得)
- 删除服务器 → 注销工具 + 关闭其连接
- 修改服务器 → 全量重建——注销全部、关闭全部连接、重读、重新注册。
不做指纹比较:改了就是重建。serverName 不变则公开工具名稳定,历史工具调用可重放
- 删除配置文件 → 该项目的全部 MCP 工具卸载

无需新开会话。文件通过 fs.watchFile 轮询(约 500ms)+ 300ms 防抖检测,并广播给该项目所有存活会话。被重配的服务器上正在执行的调用可能在重建瞬间被中断。

连接死亡(v4):服务器的进程若死亡,SDK 的 onclose 触发,该 agent 丢弃死连接;下一次调用自动重连(懒)——无需重启、无需新会话、无需改配置。每个 agent 自管:无广播,一个会话里的死亡从不打扰另一个会话。
重连失败会以工具错误的形式浮现,下次调用再试。注意:重连后,服务器自身的内部依赖(如浏览器连接)可能还需数秒就绪——该窗口内的调用可能以服务器自己的错误失败;这是服务器行为,不是桥的缺陷。

空闲断开:连续 idleTimeoutMs 毫秒无调用即断开连接(默认 5 分钟;按服务器配置,0 = 永不)。空闲会话不占子进程;下次调用自动重连(仅多一次延迟)。

懒连接须知:工具 schema 只存在于服务器上,所以会话创建时每个被接受的服务器会做一次短暂的 schema 同步(连接 + 列工具 + 注册 + 关闭)。从不调用的服务器也只付出这一次短暂 spawn;之后不保留连接。若创建时 schema 同步失败(服务器没起来),该服务器的工具不会注册,直到下次配置变化或新开会话。

环境变量降权

MCP 子进程使用官方 scrubbedParentEnv() 清理后的环境:剔除凭据形态的变量名(匹配 KEY|PASSWORD|SECRET|TOKEN)与陈旧的 DSH_ 变量。
PATH、HOME 和区域设置保留,子进程正常运行;宿主环境里碰巧存在的密钥不会被继承,只有条目显式声明的 env 会加回。这不是沙箱:恶意配置仍能以你的用户身份执行代码、读取你的文件(见信任模型)。

信任模型 ⚠️

.dsh/mcp.json 是可执行内容——信任模型与 package.json 的 scripts 完全相同。git clone 的仓库可以自带 .dsh/mcp.json(正如可以自带恶意 postinstall),打开项目并创建会话时它就会执行。只打开你信任来源的项目。插件缩小了爆炸半径(清理环境、可审计日志),但无法也不能让不可信项目变安全。

日志

- ctx.logger(宿主 stdout——本部署不落盘)
- ~/.dsh/logs/dsh-project-mcp-bridge/dsh-project-mcp-bridge.log
(追加式;每个环节——配置读取、跳过原因、连接、工具注册、关闭——都带时间戳与项目路径记录)

已知限制

- 只桥接工具能力:MCP 的 resources 与 prompts 不支持。
- 连接是每 agent 独占、绝不池化:N 个会话调用同一服务器 = N 个进程。
重服务器(如 chrome-devtools)每个活跃会话占一个进程——空闲超时让不用的进程很快释放。会话创建时每个服务器还会付一次短暂的 schema 同步 spawn。
- 不支持 MCP 的流式/任务型执行(仅普通 call)。

延伸阅读

- 设计笔记:DSH 的哲学与本插件的对齐 · Design notes (English) —— DSH 为什么这样分层、它的信任模型、热加载边界,以及"项目级 MCP 为什么是插件的活"。
预览分享卡片长什么样 ↓KYinCode/dsh-project-mcp-bridge
分享 · DeepSeek Harness Hub
KYinCode/dsh-project-mcp-bridge

按项目加载 MCP 服务器,改配置即时生效无需重启

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