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

工作区 MCP 加载器 Momojie-S/dsh-workspace-mcp

DeepSeek Harness
Momojie-S24 天前有提交已提供中文文档扫描:含敏感能力

DSH 插件: 按 workspace 加载 MCP server (agent-scoped)

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

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

该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Momojie-S/dsh-workspace-mcp
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · dev
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 24 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/30) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

engines.node 要求 >=24,不满足 Node 22.19.0

展开查看检查明细 ↓

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

✗npm 包@momojie-s/dsh-workspace-mcp(未发布到 npm,仅可源码安装)
✗Node 引擎要求 >=24 · 基线 Node 22.19 不满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/18 00:24:46

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

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

可执行外部命令读写/删除本地文件
查看扫描证据(共 9 处,展示前 9 条)
  • 删除本地文件递归
    scripts/build.mjs:27
    await rm(stage, { recursive: true, force: true })
  • 执行外部命令固定命令
    scripts/build.mjs:28
    execSync('tsc --outDir lib-tmp', { cwd: root, stdio: 'inherit' })
  • 读取本地文件
    scripts/build.mjs:37
    const liveExists = await readdir(live).then(() => true, () => false)
  • 删除本地文件递归
    scripts/build.mjs:39
    await rm(retired, { recursive: true, force: true })
  • 写入本地文件
    scripts/build.mjs:40
    await rename(live, retired)
  • 写入本地文件
    scripts/build.mjs:43
    await rename(stage, live)
  • 写入本地文件
    scripts/build.mjs:45
    if (liveExists) await rename(retired, live)
  • 删除本地文件递归
    scripts/build.mjs:48
    await rm(retired, { recursive: true, force: true })
  • 读取本地文件
    scripts/build.mjs:50
    const pkg = JSON.parse(await readFile(join(root, 'package.json'), 'utf8'))
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-invariants@deepseek-ai/dsh-session@deepseek-ai/dsh-subprocess@deepseek-ai/dsh-tools@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • agent作用域隔离

README

由 DeepSeek 最新模型翻译生成
@momojie-s/dsh-workspace-mcp DSH 插件:按 workspace(session cwd) 自动加载/卸载 MCP server——每个项目自己的 .dsh/mcp.servers.yml 只在自己的会话生效,MCP 工具注册到 agent scope,随 agent 生灭自动回收,不同项目的 MCP 互不干扰。 环境要求 - DSH >= 0.1.0-rc.6(已验证至 0.2.0-rc.2) 用法 项目根放 .dsh/mcp.servers.yml: servers: my-server: transport: stdio command: npx args: ["-y", "some-mcp-server@latest"] env: {} remote: transport: streamable-http url: https://example.com/mcp headers: Authorization: "Bearer <token>" 字段与 @deepseek-ai/dsh-mcp-client 对齐(transport / command / args / env / url / headers / toolCallTimeoutMs / reconnect)。
展开完整文档(README 剩余 1 节)
@momojie-s/dsh-workspace-mcp

DSH 插件:按 workspace(session cwd) 自动加载/卸载 MCP server——每个项目自己的 .dsh/mcp.servers.yml 只在自己的会话生效,MCP 工具注册到 agent scope,随 agent 生灭自动回收,不同项目的 MCP 互不干扰。

环境要求

- DSH >= 0.1.0-rc.6(已验证至 0.2.0-rc.2)

用法

项目根放 .dsh/mcp.servers.yml:

servers:
my-server:
transport: stdio
command: npx
args: ["-y", "some-mcp-server@latest"]
env: {}
remote:
transport: streamable-http
url: https://example.com/mcp
headers:
Authorization: "Bearer <token>"

字段与 @deepseek-ai/dsh-mcp-client 对齐(transport / command / args / env / url / headers / toolCallTimeoutMs / reconnect)。

- agent 创建即连接注册(agent/created),首个模型请求就含这些工具;headless "create 后立刻发消息" 的竞速场景第 1 步可能没有,第 2 步必有
- 断线自动重连(移植官方 dsh-mcp-client 的 supervisor):启动失败与中途断线均按指数退避重连并重新注册工具;重连期间旧工具保持注册(调用会失败),server 恢复后自动换新。stdio = 重新 spawn,http = 重新握手
- 会话失效自愈(≥0.2.1,官方 client 尚无此能力):streamable-http server 重启/会话驱逐后的 Session not found 类错误自动判定断线并换代重连,无需手动"强制重连"
- stdio 环境继承(≥0.3.0,与全局 MCP 一致):子进程拿到 scrubbed 父环境(剥 KEY|PASSWORD|SECRET|TOKEN 命中名与 DSH_* 前缀名)+ yml env 覆盖层——需要父环境变量(如 PYTHONPATH)的 server 直接工作;yml env 是覆盖层不是完整环境
- server 声明受支持的 outputSchema 时进入 structuredContent 输出契约;非法工具列表 / 注册名冲突整代拒绝/回滚(≥0.3.0,官方对齐)
- server 发 toolListChanged 通知时自动重同步工具列表
- 改配置文件由 chokidar 监听,保存即重载;无该文件的目录不加载任何 MCP

headless/tui profile 临时挂载

这两个 profile 默认没挂 workspace-mcp,需要时用 --patch 临时挂 file:/// 行指向其 lib(纯 host 半部插件可临时这样挂,带浏览器半部的插件不行):

dsh --profile headless --patch <(echo "- insert:
- id: workspace-mcp
name: file:///D:/code/workspace/deepseek-harness-101/plugins/dsh-workspace-mcp/lib/index.js") "任务…"

与全局 MCP 的同名遮蔽(实测结论)

两边工具名都是 mcp__<serverName>__<tool>,冲突语义来自 DSH 工具注册表——agent 作用域遮蔽全局(per-tool,按名字逐个遮蔽):

| 场景 | 行为 |
| serverName 不同 | 共存,两组工具模型都可见(正常用法) |
| 同 serverName(工具名撞车) | 项目级赢:模型看到并调用的都是项目版(web 从第 1 步起;竞速输了的场景第 1 步可能暂用全局版,第 2 步起项目版)。全局版对没配此 server 的其它 workspace 不受影响 |
| 全局 patch 里两条同 serverName | 后者整代注册回滚,日志报 already registered,该 server 一个工具都没有 |
| 同一个 yml 里重复 server 键 | YAML 后键覆盖前键 |

同名遮蔽是刻意覆盖的正规姿势(如把全局 server 指向本地 dev 实例调试);无意撞名就改 serverName。若两边工具列表不完全一致,只有重名的那部分被遮蔽,其余各自可见。

安装

本插件是组合包(dsh.bundle),用 dsh plugin 安装进 profile,自动追加配置层,无需手编 patch:

GitHub(私仓需 git 凭据;pnpm ≥10 首次 add 会提示授权构建,按提示把包键写进 ~/.dsh/profiles/web/pnpm-workspace.yaml 的 allowBuilds 后重新 add)
dsh plugin --profile web add github:Momojie-S/dsh-workspace-mcp

或 tarball(pnpm pack 产物,无授权要求)
dsh plugin --profile web add momojie-s-dsh-workspace-mcp-0.2.0.tgz

验证层就位后重启 DSH:

dsh web --dump-config | Select-String workspace-mcp # 应看到对应层

开发模式:源码直连(改代码 → 重启验证)

编译 npm install && npm run build,profile 的 cordis.patch.yml 手动加行(name 用 file:/// URL 指向 lib/index.js):

- insert:
- id: workspace-mcp
name: file:///D:/code/workspace/deepseek-harness-101/plugins/dsh-workspace-mcp/lib/index.js
config:yaml
configFile: '.dsh/mcp.servers.yml'
verbose: true

配置

插件级(patch config 字段):

| 字段 | 默认值 | 说明 |
| configFile | .dsh/mcp.servers.yml | 相对 workspace 根的配置文件路径 |
| verbose | false | 输出连接/注册详细日志,排查用 |
| reconnect.enabled | true | 断线/启动失败是否自动重连 |
| reconnect.initialDelayMs | 500 | 首次重连延迟,此后指数翻倍 |
| reconnect.maxDelayMs | 30000 | 退避封顶;连接存活超此值则重置尝试预算(偶发崩的能无限恢复,crash-loop 的被掐掉) |
| reconnect.maxAttempts | 10 | 一次断线周期内最大连续失败次数,耗尽后卸载该 server 全部工具;改配置文件或重启恢复 |

per-server 覆盖(.dsh/mcp.servers.yml,同名项优先于插件级): yaml servers: flaky: transport: stdio command: npx
args: ["-y", "some-mcp"]
reconnect:
enabled: true
initialDelayMs: 1000
maxAttempts: 5

验证

项目根放 .dsh/mcp.servers.yml 配一个测试 server(如 MCP 官方 server-everything),在会话里让智能体列工具:

mcp__<serverName>__<toolName>

工具出现即生效;切到无配置的目录,这些工具不再出现,即隔离生效。

排障时挂载 config 开 verbose: true:连接/注册日志含 [ws-mcp] server "xxx": 注册 N 个工具(stdio 场景在 stderr)。

断线重连的可执行验证(不经 DSH host): bash
npm test # 杀 server 子进程 → 自动重连恢复;启动失败 → 退避重试 → 放弃卸载;Session not found → 换代重连;官方对齐五项(env 继承/输出契约等)

设计文档见 docs/design/overview.md;官方 dsh-mcp-client(全局/profile 级)的配置见合集仓库 docs/official-usage/mcp.md。
预览分享卡片长什么样 ↓Momojie-S/dsh-workspace-mcp
分享 · DeepSeek Harness Hub
Momojie-S/dsh-workspace-mcp

DSH 插件: 按 workspace 加载 MCP server (agent-scoped)

这是你的仓库?认领条目

回到顶部