在侧栏增删 MCP 服务器并就地试用工具调用
29.7/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add 2239058652/dsh-mcp-workbench该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 37 处,展示前 37 条)
- 执行外部命令来自配置/变量scripts/prepare.mjs:23
const result = spawnSync(process.execPath, [bin, ...args], { stdio: 'inherit' }) - 删除本地文件递归scripts/prepare.mjs:29
rmSync(new URL('../lib', import.meta.url), { recursive: true, force: true }) - 读取本地文件scripts/changelog-section.mjs:22
const changelog = readFileSync(resolve(import.meta.dirname, '..', 'CHANGELOG.md'), 'utf8') - 读取本地文件scripts/check-tag-version.mjs:22
const pkg = JSON.parse(readFileSync(resolve(import.meta.dirname, '..', 'package.json'), 'utf8')) - 读取本地文件scripts/fix-dts.mjs:12
if (!existsSync(root)) { - 读取本地文件scripts/fix-dts.mjs:20
for (const entry of readdirSync(dir, { withFileTypes: true })) { - 读取本地文件scripts/fix-dts.mjs:25
const text = readFileSync(full, 'utf8') - 写入本地文件scripts/fix-dts.mjs:31
writeFileSync(full, next) - 执行外部命令来自配置/变量scripts/release.mjs:43
execFileSync(command, args, { - 执行外部命令固定命令scripts/release.mjs:53
return execFileSync('git', args, { cwd: root, stdio: ['ignore', 'pipe', 'pipe'], encoding: 'utf8' }).trim() - 读取本地文件scripts/release.mjs:64
const pkg = JSON.parse(readFileSync(packagePath, 'utf8')) - 写入本地文件scripts/release.mjs:70
writeFileSync(packagePath, `${JSON.stringify(pkg, null, 2)}\n`) - 读取本地文件scripts/release.mjs:76
let probe = readFileSync(probePath, 'utf8') - 写入本地文件scripts/release.mjs:84
writeFileSync(probePath, probe) - 读取本地文件scripts/release.mjs:87
let changelog = readFileSync(changelogPath, 'utf8') - 写入本地文件scripts/release.mjs:95
writeFileSync(changelogPath, changelog) - 读取本地文件scripts/verify-artifacts.mjs:14
if (!existsSync(path.join(root, rel))) throw new Error(`missing artifact: ${rel}`) - 执行外部命令来自配置/变量scripts/verify-artifacts.mjs:19
execFileSync(process.execPath, ['--check', path.join(root, rel)], { stdio: 'inherit' }) - 读取本地文件scripts/verify-artifacts.mjs:33
const client = readFileSync(path.join(root, 'lib/client.js'), 'utf8') - 删除本地文件递归scripts/verify-headless.mjs:51
rmSync(path, { recursive: true, force: true }) - 读取本地文件scripts/verify-headless.mjs:69
const installAnchorPath = anchorCandidates.map(candidate => fileURLToPath(candidate)).find(path => existsSync(path)) - 写入本地文件scripts/verify-headless.mjs:92
writeFileSync(join(profile.dir, 'cordis.yml'), PROFILE_ROOT_CONFIG) - 读取本地文件scripts/verify-self-contained.mjs:9
const pkg = JSON.parse(readFileSync(path.join(root, 'package.json'), 'utf8')) - 执行外部命令固定命令src/probe.ts:26
execFile('taskkill', ['/pid', String(child.pid), '/T', '/F'], { windowsHide: true }, () => {}) - 发起网络请求src/probe.ts:107
const response = await fetch(url, { - 执行外部命令来自配置/变量src/probe.ts:187
child = spawn(target.command, [...target.args], { - 发起网络请求src/service.ts:535
const outcome = await approval.request({ - 写入本地文件src/write.ts:52
await writeFile(filePath, FRESH_FILE_HEADER, 'utf8') - 写入本地文件src/write.ts:54
await copyFile(filePath, backupPath) - 写入本地文件src/write.ts:85
if (existing !== null) await copyFile(filePath, backupPath) - 写入本地文件src/write.ts:87
await writeFile(filePath, content, 'utf8') - 读取本地文件src/write.ts:96
return await readFile(filePath, 'utf8') - 读取本地文件src/write.ts:157
const content = await readFile(filePath, 'utf8') - 写入本地文件src/write.ts:161
await writeFile(filePath, `${normalized}${block}`, 'utf8') - 读取本地文件src/write.ts:164
const after = await readFile(filePath, 'utf8') - 读取本地文件src/write.ts:177
names = (await readdir(dir)).filter(name => name.startsWith(prefix)) - 删除本地文件src/write.ts:188
await unlink(join(dir, entry.name))
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-attachment@deepseek-ai/cordis@deepseek-ai/cordis-plugin-include@deepseek-ai/cordis-plugin-loader@deepseek-ai/dsh-agent@deepseek-ai/dsh-app-boot@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-cmdline给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DSH 的 MCP 管理控制台:左侧栏面板管理 MCP 服务器、就地试用工具、重连与探测
README
由 DeepSeek 最新模型翻译生成dsh-mcp-workbench
官方 DeepSeek Harness MCP client 的 MCP 管理控制台 —— 在左侧栏的 MCP 页面里增删改 MCP 服务器、试用工具调用,配以诚实的连接状态、健康诊断与安全可逆的配置档写入。
官方 client = 桥接,本插件 = 控制台:经 mcp/status seam 读取状态,只写入只追加、走审批的配置档补丁。
这是个人 fork。 基于 PerryLink/dsh-mcp-panel 修改,仅供本人使用;上游的作者与维护归 PerryLink,本仓库与其无隶属关系,也不提供官方支持。
DSH Market
dsh plugin --profile <name> add github:2239058652/dsh-mcp-workbench
📖 生态实测知识库(实测数据,不是营销):插件开发指南 · 选型实测数据 · 维护取舍判据。
安装与卸载
- git 通道(最新 main):dsh plugin --profile web add github:2239058652/dsh-mcp-workbench —— prepare 脚本只用生产依赖构建。
- npm 通道:本 fork 没有发布到 npm(dsh-mcp-workbench 在 npm 上不属于这个仓库),请用上面的 git 通道。
展开完整文档(README 剩余 1 节)
dsh-mcp-workbench
官方 DeepSeek Harness MCP client 的 MCP 管理控制台 —— 在左侧栏的 MCP 页面里增删改 MCP 服务器、试用工具调用,配以诚实的连接状态、健康诊断与安全可逆的配置档写入。
官方 client = 桥接,本插件 = 控制台:经 mcp/status seam 读取状态,只写入只追加、走审批的配置档补丁。
这是个人 fork。 基于 PerryLink/dsh-mcp-panel 修改,仅供本人使用;上游的作者与维护归 PerryLink,本仓库与其无隶属关系,也不提供官方支持。
DSH Market
dsh plugin --profile <name> add github:2239058652/dsh-mcp-workbench
📖 生态实测知识库(实测数据,不是营销):插件开发指南 · 选型实测数据 · 维护取舍判据。
安装与卸载
- git 通道(最新 main):dsh plugin --profile web add github:2239058652/dsh-mcp-workbench —— prepare 脚本只用生产依赖构建。
- npm 通道:本 fork 没有发布到 npm(dsh-mcp-workbench 在 npm 上不属于这个仓库),请用上面的 git 通道。
- tarball 通道:在本仓库 pnpm pack,再 dsh plugin --profile web add ./dsh-mcp-workbench-<version>.tgz。
- 卸载:从 cordis.patch.yml 移除 mcp-workbench 行(web 面板热重载),从配置档的 node_modules 删除本包,并用 dsh web --dump-config 确认没有残留的 mcp-workbench 行。
dsh-mcp-workbench 是什么?
官方 DeepSeek Harness MCP client 的 MCP 管理控制台 —— 在左侧栏的 MCP 页面里增删改 MCP 服务器、试用工具调用,配以诚实的连接状态、健康诊断与安全可逆的配置档写入。
官方 client = 桥接,本插件 = 控制台:经 mcp/status seam 读取状态,只写入只追加、走审批的配置档补丁。
dsh-mcp-workbench 工作流图:安装 → 打开面板 → 操作。
工作流概览:安装 → 打开面板 → 操作。下面的示例使用实际命令面。
同一次运行,动图版。
兼容性
| 维度 | 状态 |
| 宿主 | DeepSeek Harness dsh-v0.2.1-rc.2(2026-10-18 验证):engines.dsh >=0.2.1-0 <0.3.0;P0 兼容路径已有回归测试。 |
| Node | ^22.19.0 \|\| >=24.0.0 |
| 平台 | Web GUI(双面:Host + 浏览器) |
| 模型 | 任意(面板只读;仅 /mcp 输出对模型可见) |
你能得到什么
dsh-mcp-workbench 是官方 MCP client 之上的体验层:只读运行时视图加上安全可逆的配置档写入。
- /mcp 命令 —— 每 server 一行:transport、目标、工具数、连接状态(来自上游 seam;未观测时如实显示 unknown)、最近错误、重连计数——模型可读、会话日志可重建、五种输出语言。
- /mcp <server> tools —— 模型可见的 mcp__ 工具名与描述。
- /mcp <server> health —— 派生自愈建议(ENOENT → 依赖缺失、ECONNREFUSED、超时、401/403/404、DNS、限流、重连耗尽…);退出码 / stderr 尾部如实标注待官方支持。
- /mcp <server> call <tool> [json] —— 经官方工具管线(ctx.tools.execute())试用调用;pre-execute 权限策略、审批、guard、post-execute 全部生效。
- 左侧栏 → MCP 页 —— 服务器列表与弹窗(详情、工具试用、资源浏览、诊断)、server CRUD、刷新与重连、探测。
- Server CRUD —— 增删改表单 → 添加用 insert,编辑/删除用 id 定向覆盖(- id: + name: + disabled:/config:)→ 剪贴板复制或审批写入,自动备份,并在报成功前对照 loader 复验。
- Resources 浏览 —— 经官方 list_mcp_resources / list_mcp_resource_templates / read_mcp_resource 工具只读列出资源、模板与 URI 读取(由上游 @deepseek-ai/dsh-mcp-resources 服务桥接);结果只显示在本页、绝不进入模型上下文。
- 工具试用 —— 在服务器弹窗里对任意 mcp__ 工具就地填参、调用、看结果;按 trialMaxResultChars 截断;仅面板可见、永不进入模型上下文。
架构:官方 client 是桥接层,本插件是控制台
@deepseek-ai/dsh-mcp-client 是唯一的桥接层:每个 MCP server 一个插件实例,以手写 cordis.yml 行的形式配置,负责连接传输、同步工具并注册 mcp__<server>__<tool> 工具名。本插件从不取代它——而是构建其上的体验层:
┌────────────────────────────────────────────┐
profile │ cordis.yml / cordis.patch.yml │
组合(每个 │ - id: mcp-github │ server 一行, │ name: '@deepseek-ai/dsh-mcp-client' │ 手写) │ config: { serverName, transport, … } │ │ - id: mcp-panel │ │ name: dsh-mcp-workbench ◄── 本插件 │ └───────────────┬────────────────────────────┘ │ ┌───────────────────────────┴───────────────────────────┐ │ │ ┌────▼──────────────┐ ┌───────────────────────────┐ │ │ @deepseek-ai/dsh- │ │ dsh-mcp-workbench(控制台) │ │ │ mcp-client │ │ │ │ │ • 传输连接 │ │ • /mcp 命令 │ │ │ • 工具同步 │ │ • 左侧栏 → MCP 页: │ │ │ • mcp__* 工具 │◄──────►│ CRUD、工具试用 │ │ │ • mcp/status seam │ 状态 │ • 健康诊断 │ │ └───────────────────┘ │ • 探测、能力一览 │ │ └───────────────────────────┘ │
控制台通过官方 client 已落地的 mcp/status 可观测 seam(事件 + mcpStatus 查询服务)、工具注册表与 loader 读取事实;写入只发生在 profile 的 patch 层——只追加、走审批、自动备份。传输、OAuth 与协议完全不动。
控制台 vs. 手写 cordis.yml
| | 手写 cordis.yml | dsh-mcp-workbench 控制台 |
| 添加服务器 | 改 YAML,注意缩进与引号 | 表单 → patch 片段 → 一键复制或写入(审批 + 自动备份) |
| 修改服务器 | 改 YAML,重启/热重载 | 表单预填当前行;未改动的密钥在 host 侧保留原值 |
| 删除服务器 | 删掉该行 | 追加 - id: + disabled: true 覆盖操作(patch 词汇表没有 remove)——可随时重新启用 |
| 查看状态 | 翻日志 | 徽章 + 重连次数 + 最近错误,来自 mcp/status seam 实时数据 |
| 试用工具 | 让模型调用 | 弹窗内试用 → 官方 ctx.tools.execute() 管线(权限与审批全程生效) |
| 排查故障 | grep 日志 | /mcp <server> health 派生自愈建议 |
| 误操作 | 手动回滚 | 每次写入只追加、留时间戳备份 |
控制台的输出就是 cordis.patch.yml 的词汇表——你手写的那几行,由它生成、预览并安全落地。
快速开始
dsh plugin --profile web add github:2239058652/dsh-mcp-workbench
1. 把 bundle 安装进 profile
dsh plugin --profile web add github:2239058652/dsh-mcp-workbench
2. 重启并校验该行
dsh --profile web --dump-config | grep -A3 'id: mcp-panel'
随后打开左侧栏 → MCP,或运行:
/mcp
/mcp everything tools
/mcp everything health
/mcp everything call echo '{"message": "hi"}'
示例
以下为插件真实入口;安装后调用一个即可。
详细示例
命令
~~~sh
/mcp github tools
输出
~~~text
Tools of "github" (1, model-visible public names):
- mcp__github__create_issue — 在 GitHub 仓库中新建 issue
来源 plugins/dsh-mcp-workbench/tests/command.spec.ts:99-110; renderer at src/command.ts:352-360
失败分支
输入
~~~text
/mcp nope tools
输出
~~~text
Unknown MCP server "nope" (configured: github)
来源 plugins/dsh-mcp-workbench/src/command.ts:104-105; plugins/dsh-mcp-workbench/tests/command.spec.ts:152-157
简短示例
- /mcp <server> tools
- /mcp <server> health
配置
所有可调项都是 Schemastery Config 字段(可从 cordis.yml 覆盖)。cordis.patch.yml 逐键内联注释。
| 键 | 默认值 | 含义 |
| probeEnabled | true | 注册 mcp_probe 后台任务工具(结果仅面板可见) |
| probeTimeoutMs | 10000 | 单次探测超时(ms) |
| maxProbes | 10 | 面板展示的探测记录数 |
| refreshIntervalMs | 0 | 建议的面板刷新间隔(ms);0 = 按需 |
| outputLanguage | en | /mcp 输出语言:en \| zh \| es \| pt \| hi |
| passiveProbeEnabled | false | 周期性探测 streamable-http 服务器 |
| passiveProbeIntervalMs | 60000 | 被动探测间隔(ms) |
| trialEnabled | true | 工具试用(MCP 页面 + /mcp call) |
| trialTimeoutMs | 120000 | 每次试用调用的面板侧截止时间(ms) |
| trialMaxResultChars | 60000 | 试用结果载荷上限(字符) |
| writeEnabled | true | 总开关:false 拒绝一切 profile 写入(仍可复制片段) |
| writeVerifyEnabled | true | 每次写入在报成功前对照 loader 重放后的状态复验 |
| writeVerifyTimeoutMs | 3000 | 写入复验的轮询预算(毫秒) |
| backupCount | 5 | 每次写入保留的 cordis.patch.yml 备份数 |
| catalogEntries | [] | 推荐服务器目录的用户覆盖:追加条目,同 id 的条目替换内置条目 |
工具与界面
| 表面 | 类型 | 说明 |
| /mcp | command | 每 server 状态行;模型可读、日志可重建 |
| /mcp <server> tools | command | 模型可见的 mcp__ 工具名与描述 |
| /mcp <server> health | command | 由脱敏错误文本派生的自愈建议 |
| /mcp <server> call <tool> [json] | command | 经官方工具管线试用调用 |
| mcp_probe | tool | 可选 Streamable HTTP 连通性探测(后台任务) |
| 左侧栏 → MCP 页 | UI 槽位(main 面板 + 侧栏条目) | 服务器列表与弹窗:CRUD、工具试用、资源浏览、探测、重连 |
| mcpWorkbench Typert Remote | service | 只读快照通道(Host → client) |
资源与提示词
Resources 已由上游桥接:base bundle 默认挂载 @deepseek-ai/dsh-mcp-resources,官方 client 把每个连接的资源 provider 注册进 ctx.mcpResources,该包拥有三个共享工具(list_mcp_resources、list_mcp_resource_templates、read_mcp_resource)。控制台特征探测该服务与已注册工具,并在每个 server 卡上提供只读 Resources 浏览(列表 / 模板 / URI 读取)——每次调用都走官方工具管线,结果只显示在本页、绝不进入模型上下文。
MCP prompt 模板与资源订阅仍待上游;能力一览中 Prompts 标注待官方支持。
权限与数据
- 权限:dshWorkshop manifest 声明 network:outbound 与 native-code:none。
- 数据:面板只读;只写入只追加的 cordis.patch.yml 片段(走审批、先备份)。URL 查询凭据、userinfo 密码、header 值、Bearer token、JWT 在渲染前一律打码;配置的 headers 从不进入任何快照,env/header 的值绝不出 Host(编辑器只见 key)。
安全边界
- 桥接层仍是桥接层。 不改传输、OAuth、协议;每个 server 一行 mcp-client,与你手写完全一致。
- 不伪造状态。 无上游观测时连接字段显示 unknown / — 并标注 statusSource: 'derived';退出码与 stderr 尾部绝不臆造。
- 写入只追加、走审批、先备份。 控制台从不改写 cordis.patch.yml:只追加生成的操作,保留最新 backupCount 份备份,并在报成功前对照 loader 重放后的状态复验(被跳过的补丁绝不显示为成功)。
- 零提示词注入。 本插件不注册任何提示词段落;对模型可见的文本只有两个工具/命令描述。
已知限制
- prompt 模板与资源订阅 待官方支持——官方 client 桥接工具与资源,但未桥接 prompts 与订阅。
- 退出码 / stderr 尾部 在 client 暴露前如实标注待官方支持*。
- 只读面板 —— 控制台从不伪造连接状态;不可观测字段显示 unknown / -1 / —。
- 写入复验而非保证 —— 控制台对照 loader 重放后的状态复验每次写入;loader 未应用时(例如该行由 $DSH_HOME/cordis.patch.yml 插入、profile 层补丁够不着)如实报失败。
Development
pnpm run typecheck && pnpm run typecheck:ci && pnpm test && pnpm run build && pnpm run verify:self-contained && pnpm run verify:artifacts && pnpm pack
scripts/verify-headless.mjs 启动真实 web profile 并打印 /mcp 实际输出。发布:node scripts/release.mjs <x.y.z> 跑全量门禁、提交并本地打 v<x.y.z> 标签(绝不推送)。
Topics
dsh, dsh-plugin, deepseek-harness, deepseek, cordis, mcp, mcp-client, observability, panel
Contributors
- @PerryLink —— 创建者与维护者。
- @xiaoyuyu6420 —— 诊断出干净 checkout 构建失败背后缺失的 client devDependencies(PR #5)。
- @feiler0 —— 贡献了 stdio MCP 服务器探测(通过 stdin/stdout 完成一次 MCP initialize 握手)(PR #7,以 PR #15 合并)。
License
Apache License 2.0 © 2026 dsh-mcp-workbench contributors
从 DSH Desktop 市场安装
所有 PerryLink 插件均可在 DSH Desktop 内置市场中浏览:市场 → 来源 → 添加来源 → 粘贴 https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → 选中。安装仍需通过市场的 npm 身份校验与你的确认。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
2239058652/dsh-mcp-workbench
在侧栏增删 MCP 服务器并就地试用工具调用
相关插件 · 工具 / 效率
破甲管控台kingcharleslzy-ai/dsh-purge
dsh-purge Community · DeepSeek Harness 社区维护版:宿主兼容、状态诊断、提示词管理、更新与本机备份回滚。基于小杨 / YuJunZhiXue 的 dsh-purge。
★ 4,330已汉化DeepSeek 客户端
74.5
网文长卷lingfengQAQ/webnovel-writer
基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200…
★ 7,826已汉化DSH
72.2
花束设计alchaincyf/huashu-design
一句话生成网页、原型、PPT 与信息图等可交付设计
★ 28,638已汉化DSH
71.7
多智能体协作HKUDS/AutoSwarm
AutoSwarm: Unify Your Agents. Unify Your Context (Codex · Claude Code · DeepSeek Harness · Muse · Grok · WorkBuddy· nanobot · and more)
★ 2,349已汉化DSH
71.6
Vox 拼贴视频生成Alisa0808/vox-director
🎬 Vox Director拼贴动效导演
★ 2,129已汉化DSH
71.4
Agent 演化引擎Q00/ouroboros
智能体 OS:智能体自己变聪明,我们只守住底线:面试准入、分阶段评估、带预算的进化循环。MCP 服务器,14 种运行时:Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等。
★ 6,311已汉化DSH
71.4
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。