dsh-skill/mcp-panel — dsh-skill-mcp-panel

by Fishquito7

dsh-skill-mcp-panel: manage skills and MCP servers from the DSH web settings UI plus the unified dsh-panel CLI. Supports managing MCP servers via stdio and HTTP connections configured through profiles.

Developer toolsstdioCommunity

Repository-wide counts · Cached 2026-08-17

Overview

The dsh-skill/mcp-panel — dsh-skill-mcp-panel MCP server is a publicly available project. Review the upstream repository for installation instructions, supported tools, compatibility, permissions, and current maintenance status.

Configuration

Configuration, transport, authentication, and runtime requirements vary by project. Open the repository before connecting and use the smallest set of credentials and permissions required.

Open the dsh-skill/mcp-panel — dsh-skill-mcp-panel repository to read the latest documentation.

KEEP EXPLORING

Compare source, connection, and authentication details before choosing an implementation.

View the complete category

模型上下文协议服务器

modelcontextprotocol

Community

一组用于模型上下文协议(MCP)的参考实现,展示了对大型语言模型(LLM)工具和数据源的安全且受控的访问方式。

Context7 Platform - Up-to-date Code Docs For Any Prompt

upstash

Community

Context7 MCP server providing up-to-date, version-specific documentation and code examples for libraries, enabling coding agents to fetch accurate docs and code snippets. Requires an API key for higher rate limits, passed via CONTEXT7_API_KEY header.

Playwright MCP

Microsoft Corporation

Community

A Model Context Protocol (MCP) server that provides browser automation capabilities using Playwright. Enables LLMs to interact with web pages through structured accessibility snapshots, bypassing the need for screenshots or visually-tuned models.

AIHawk

feder-cr

Community

AIHawk is an anti detect browser and web browsing agent, open source, with an MCP server for coding agents: undetected, no captchas, no blocks. It requires an OpenRouter API key for the standalone web UI mode, which can be provided via the --openrouter-key flag or the OPENROUTER_API_KEY environment variable or a .env file in the running directory.

FROM THE SOURCE

Repository README

Build-time snapshot · Retrieved 2026-10-05

View original

dsh-skill-mcp-panel

在 DSH Web 侧边栏管理「技能」与「MCP」服务器,并附统一终端命令 dsh-panel

npm version npm downloads GitHub release DSH license

简体中文 · English


DSH 插件:把技能与 MCP 服务器的管理搬进 DSH Web 的主页侧边栏——点左栏的「技能」/「MCP」,中央主区直接切到整页面板(不是弹窗,也不是设置页里的 tab),改完即生效。随包附带统一终端命令 dsh-panel:面板能做的事命令行都能做,另外多一个跨 profile 升级。

  • 🗂️ 技能管理 —— 列表预览、搜索、工作区分栏与分组筛选、卡片展开查看全文、热启停 / 删除,支持 .md / .zip / 技能文件夹的添加与批量迁移
  • 🔌 MCP 服务器管理 —— 可视化维护 profile cordis.patch.yml 中的 MCP 受管块,Stdio / HTTP 两种调用方式,支持测试连接,保存后由 DSH HMR 热加载
  • 🧩 整页面板 —— 与宿主内置「插件」页同一套槽位机制,点左栏即在中央主区切页,页面左上角另有「← 返回会话」
  • ⌨️ dsh-panel 命令行 —— dsh-panel skill … 与 dsh-panel mcp … 覆盖两个面板的全部能力
  • 📦 装上就能用 —— npm 与 Release tarball 安装的都是预构建产物

profile 提示:mcp 子命令必须显式写 --profile <name>,且名字必须已存在——打错会被拒绝,不会新建 profile。skill 不按 profile 分家(技能按用户根 / 工作区存放),不需要该参数。不带 --profile 的 dsh-panel update 升级全部已安装本插件的 profile(desktop 由桌面应用独占,自动跳过)。

目录:界面预览 · 安装 · 功能 · 命令行 · 工作原理 · 开发 · 卸载 · 更新日志 · 链接 · License

界面预览

面板入口在主页左侧栏「插件」下方(v2.1.0 起由设置页迁移到侧边栏),点「技能」/「MCP」即在中央主区打开;两个页面左上角都有「← 返回会话」,可直接回到进面板前那个会话。

DSH 主页侧边栏:插件 / Skill/MCP
入口 · 主页侧边栏中的「Skill/MCP」(v2.1.5 起两个面板合并为一行,标签固定用英文写法)

技能面板:搜索、全部启停、显示插件技能开关与技能卡片
技能面板 · 搜索 / 全部启停 / 显示插件技能开关 / 卡片展开查看全文

分组编辑器:新建分组、选择工作区并批量勾选成员
技能分组 · 新建 / 重命名 / 批量勾选成员

批量迁移技能:源工作区、多选目标工作区、复制或移动
批量迁移 · 源工作区 / 多选目标 / 复制或移动

MCP 面板:注册机制说明、服务器卡片、工具数量、启停、测试连接与删除
MCP 面板 · 注册机制说明 / 服务器卡片 / 工具数 / 启停 / 测试连接

添加 MCP 服务器:STDIO 与 HTTP 两种调用方式
添加 MCP 服务器 · STDIO / HTTP 两种调用方式

安装

  1. 安装本包,二选一(桌面端用户请在内置插件安装器中输入'...add'后面的内容):

    方式一:GitHub Release tarball(推荐,恒定指向最新版)

    dsh plugin --profile web add https://github.com/Fishquito7/dsh-skill-mcp-panel/releases/latest/download/dsh-skill-mcp-panel.tgz
    

    这是无版本号的稳定链接:每次发版都同时上传别名 dsh-skill-mcp-panel.tgz(恒定指向最新版)与带版本号的 dsh-skill-mcp-panel-<版本>.tgz,所以这条命令不随版本改。需要锁定具体版本时,把 latest/download/dsh-skill-mcp-panel.tgz 换成 download/v<版本>/dsh-skill-mcp-panel-<版本>.tgz 即可。

    方式二:npm(预构建,插件市场同款通道)

    dsh plugin --profile web add dsh-skill-mcp-panel
    

    两种方式都安装预构建产物,无需本地构建。也可以从 Git 安装(Git 来源的依赖默认禁止运行 prepare 构建脚本;若报 git-hosted plugins build on install...,把 pnpm 在上面打印的 key 加到 profile 目录 pnpm-workspace.yaml 的 allowBuilds 下再重跑):

    dsh plugin --profile web add github:Fishquito7/dsh-skill-mcp-panel
    
  2. 重启网关

    重启后刷新页面:左侧栏「插件」下面就是合并后的「Skill/MCP」一行——点它把中央主区切成面板,面板内部再用页签切换「技能」与「MCP」。

功能

面板与宿主自带的「插件」页一样,是侧边栏全局面板:左栏只有一行「Skill/MCP」(v2.1.5 起两个面板合并,侧栏那一格还给会话),点它直接把中央主区切过去(不是设置页那种弹窗),页签在面板内部切换,并记住你上次离开时停在哪一页。左上角有「← 返回会话」箭头,点它立刻回到进面板之前那个会话;点会话列表里的任意会话或「插件」也能切走。

技能面板

  • 技能卡片列表:预览已注册安装的 skill,点击卡片可展开查看完整内容
  • 插件技能开关(v2.1.5):插件随包自带的 skill(内置 office、badge 等)默认照常显示,「全部启停」右侧可一键隐藏——只看自己管理的文件技能,隐藏数量会在空列表里说明
  • skill 状态:启用、停用状态标签,与内置插件列表同款样式
  • skill 管理:开关热启用/停用、删除;按名称搜索;进入页面自动刷新
  • skill 添加(0.7.0 统一入口):点「+」直接选文件(.md / .zip),或把文件、压缩包、技能文件夹直接拖进页面——自动识别目录束 / 单文件 / 压缩包结构,不合规内容会被拒绝并提示原因
  • 工作区分栏(0.3.0):技能实体直接存放在其所属位置里——全局在 ~/.dsh/skills,限定工作区在该工作区的 .dsh/skills。页面「技能列表」下方有一条工作区选择器(折叠式下拉,全局 + 各工作区,最多显示 11 项、其余滚动),选中即只显示该工作区下的技能。
  • 批量迁移:「+」号左侧的迁移按钮:源工作区、目标工作区(可多选)与技能都在对话框内手动选择,批量复制或移动(默认不勾选任何技能;逐个迁移、失败不影响其余;移动模式限单个目标)。源工作区有分组时,可在技能列表上方按分组筛选(0.7.0)。
  • 技能分组(0.5.0):工作区选择器下方新增分组横栏(全部 + 分组名,放不下时换行),点击只显示该分组下的技能。「分组」按钮(迁移按钮左侧)打开分组编辑器:新建 / 重命名 / 删除分组、选择工作区、命名并批量勾选成员。分组只写入插件自己的显示配置(~/.dsh/skills/.system/skill-viewer/groups.json),不修改技能目录。
  • 作用域化管理(0.6.4):同名技能同时存在于全局与某工作区时,删除、启停、查看内容均按(名称 + 作用域)精确操作——页面各行独立展开、独立操作,绝不影响其它作用域里的副本;找不到指定作用域的条目会直接报错,不会回退误操作。命令行同名技能也需用 --global / --project / --workspace 显式指定。

MCP 面板(v2.0.0)

  • 主页侧边栏「技能」下方新增「MCP」面板,管理 profile cordis.patch.yml 中的 MCP 服务器受管块;
  • 支持 Stdio(本地命令)与 HTTP(streamable-http)两种调用方式;
  • 支持新增、编辑、启停、删除、测试连接;保存后由 DSH HMR 热加载,无需重启网关;
  • env / headers 密钥在 RPC 与页面中脱敏,编辑时缺省 key 保留旧值;
  • 环境变量取值(v2.1.5):值里直接写 ${NAME} 就是读环境变量,面板 / CLI 保存时自动格式化成 cordis.patch.yml 里的 !!js 表达式(DSH 配置层唯一的插值机制,宿主装载时求值)。例如请求头填 Bearer ${MCP_TOKEN},落盘就是 Authorization: !!js '`Bearer ${process.env.MCP_TOKEN}`',读回来仍显示 Bearer ${MCP_TOKEN};!!js 前缀保留为进阶写法(原样透传任意 JS 表达式),手写的 !!js 也不会再被写坏成字面量
  • MCP 注册机制说明(v2.1.5):MCP 页标题右侧的「注册机制」按钮可展开一小段说明——entry 长什么样、受管块在哪、工具如何命名、环境变量与 !!js 的关系
  • 命令 / 参数 / 环境变量 / 工作目录 / 地址 / 请求头为空时用灰字给出示例,照抄改路径即可
  • cordis.patch.yml 面板块外的用户内容逐字节保留。

主页面板与返回会话(v2.1.0,v2.1.5 合并为单入口)

  • 管理面板从设置页迁移到主页侧边栏:与宿主自带的「插件」页同一套槽位机制(sidebar.panellist 列表槽位 + main 键控槽位),点击左栏「技能」/「MCP」直接在中央主区切页,设置页不再有这两个 tab;面板自带整页外壳(滚动与页边距)。需要宿主提供上述两个槽位,本机 DSH 0.1.6-alpha.2 已实测。
  • 「← 返回会话」箭头:两个页面左上角各一个,点它立刻回到进面板之前那个会话(调宿主 ctx.layout.selectPanel(null),不改变当前会话)。
  • 技能 / MCP 合并成一行 + 页签(v2.1.5):侧栏只占一行「Skill/MCP」,面板内部用页签切换两个页面;页签选择记在浏览器 localStorage(键 dsh-skill-mcp-panel:last-tab),下次点开侧栏这一行就停在上次离开的那一页。

DSH 版本兼容

本插件对宿主有三处版本敏感的依赖,彼此无关,同一份构建同时满足全部三条:

宿主版本 ① 插件树加载(TypertCodec) ② 技能页图标(primitives 导出名) ③ 侧栏面板槽位
0.1.5-rc.x ✅ 读 schema ✅ 旧名 ⚠️ 未验证
0.1.6-alpha.1 ✅ 读 schema ✅ 旧名 ⚠️ 未验证
0.1.6-alpha.2 ~ 0.1.7-alpha.0 ✅ 读 create ✅ 旧名 ✅
0.1.7-alpha.1 ~ 0.1.8 ✅ 读 create ✅ 新名 ✅
0.2.0-rc.x ✅ 读 create ✅ 新名 ✅
  • ① TypertCodec create() 契约:自 0.1.6-alpha.2 起 strict codec 改为持 schema 工厂 create();仍写 schema: 的插件在注册阶段直接抛错,整个插件树加载失败、网关起不来(Issue #20)。本插件的每个 codec 同时携带 schema 与 create,两代宿主都只做 typeof 检查、都不拒绝多余属性,因此一份构建通吃,无需版本探测。守卫:test-codec.mjs。
  • ② 技能页图标导出名:0.1.7-alpha.1 把图标的像素后缀换成描边档位(IconSkillOutline16 → IconSkillOutlineRegular,尺寸改由 size prop 传),两代命名没有交集。技能半区 6 处引用改走 primitiveIcon(cur, legacy)「新名优先、旧名回退」;若直接换成新名,0.1.6 及更早的用户会反向打不开。守卫:test-host-icons.mjs。
  • ③ 侧栏面板槽位:v2.1.0 起面板挂在宿主 sidebar.panellist(list 槽位)+ main(键控槽位)上,需要宿主提供这两个槽位。0.1.6-alpha.2 实测通过,0.1.7 系列槽位名未变。0.1.5-rc.x / 0.1.6-alpha.1 未验证;即使槽位缺失,插件树与 CLI 仍然可用,只是左栏不会出现「技能」「MCP」两行。
  • ④ peerDependencies 硬闸门(v2.1.2):本包声明 "@deepseek-ai/dsh": ">=0.1.5-rc.0 <0.3.0-0"。DSH 的 evaluatePluginCompatibility 会在安装时与profile 启动时校验它,不满足就拒绝加载并打印精确豁免命令——把「静默崩」换成「明着拦」。没有这个字段时该校验直接放行,这正是 0.1.7-rc.1 那次断裂能静默发生的原因。
    • 上界写成 <0.3.0-0 而不是 <0.3.0:该校验带 includePrerelease,<0.3.0 会把 0.3.0-rc.1 也放进来。

    • v2.1.3 把上界从 <0.2.0-0 抬到 <0.3.0-0:桌面端自动升级到 0.2.0-rc.2 后,旧区间会被判成不兼容,宿主在 profile 启动时直接禁用整行(dsh: disabling profile plugin row "skill-mcp-panel": ...),面板从侧栏整体消失。0.2.0 的 ①②③ 三处契约均未变(图标导出名、sidebar.panellist+main 槽位、TypertCodec 仍读 create()),且已用 0.2.0 自带的 evaluatePluginCompatibility 与 registry 校验器实测通过。

    • 下限 0.1.5-rc.0 是「插件树还能加载」的边界,比上表「面板已实测」的范围更宽——区间内不等于面板已验证。

    • 在区间外的宿主上确需使用时,用宿主自己的精确版本豁免:

      dsh plugin --profile web allow-version [email protected] --dsh-version <宿主版本> --accept-risk
      
    • 守卫:test-cli-profiles.mjs(直接调用宿主真实的 evaluatePluginCompatibility 验证区间两端)。

面板行为调整(v2.0.5)

  • 作用域选择器固定为折叠式下拉(最多显示 11 项,其余滚动);分组栏改为换行布局。
  • 技能列表不再依赖「是否打开了会话」:没有会话时服务端回退全局注册表。

命令行

统一父命令为 dsh-panel。

全局 shim:宿主启动时会在 npm 全局 bin 目录写入 dsh-panel。Windows 下写三份——dsh-panel.cmd(CMD)、dsh-panel.ps1(PowerShell)、以及无扩展名的 dsh-panel sh 脚本(Git Bash / MSYS2 / Cygwin 靠它,v2.1.5 之前缺这一份,bash 里会报 command not found);macOS / Linux 写一份可执行的 dsh-panel。三份都指向「最后启动的那个 profile」装的插件副本。

mcp 子命令必须用 --profile <name> 指定目标 profile,名字必须已存在(判据是 $DSH_HOME/profiles/<name>/package.json)。打错名字会以退出码 2 被拒绝,不会像 dsh plugin 那样顺手新建一个 profile。skill 子命令不需要 --profile——技能按用户根 / 工作区存放,不按 profile 分家。dsh-panel update 不带 --profile 时升级全部已安装本插件的 profile。

profile 概览

dsh-panel profiles        # 每个 profile 的已装版本 / bundles 挂载情况 / 安装 spec

输出的第一行是当前 dsh-panel 入口的路径与版本。这条信息是必要的:dsh-panel 是全局单例 shim, 由最后启动的那个 profile 写入(src/global-shim.ts),因此它与表中任何一行都没有必然关系。

技能子命令

dsh-panel skill --help

dsh-panel skill list                                  # 列出技能(含工作区:全局 / 工作区)
dsh-panel skill add <path>                            # 添加到全局(.md 文件、目录束或 .zip 压缩包)
dsh-panel skill add <path> --workspace D:\项目A        # 直接添加到指定工作区
dsh-panel skill scope <name> --global                 # 迁移单个技能到全局
dsh-panel skill scope <name> --workspace D:\项目A      # 迁移到指定工作区(--copy 复制)
dsh-panel skill migrate <name...|--all> --from <全局|路径> --to <全局|路径> [--copy] [--yes]
dsh-panel skill disable <name>                        # 停用
dsh-panel skill enable <name>                         # 启用
dsh-panel skill delete <name>                         # 删除(需确认)

技能文件全局共享(~/.dsh/skills 与 <工作区>/.dsh/skills),不按 profile 分家,所以 skill 子命令不需要 --profile。可选地加上它,会顺便确认该 profile 存在,并在它没把本插件 挂进 dsh.profile.bundles 时提醒你「这个 profile 看不到面板」。

MCP 子命令

dsh-panel mcp list --profile web
dsh-panel mcp add --name <serverName> --stdio --command <cmd> [--args <arg> ...] [--env KEY=VALUE ...] [--cwd <path>] --profile web
dsh-panel mcp add --name <serverName> --http --url <url> [--header KEY=VALUE ...] --profile web
dsh-panel mcp enable|disable <serverName> --profile web
dsh-panel mcp remove <serverName> [--yes] --profile web
dsh-panel mcp test <serverName> --profile web

环境变量取值直接写 ${NAME}(保存时格式化成 cordis.patch.yml 的 !!js 表达式,由 DSH 装载时求值);以 !!js 开头的值按进阶写法原样透传:

dsh-panel mcp add --name github --stdio --command npx --args -y --args @modelcontextprotocol/server-github \
  --env 'GITHUB_TOKEN=${GITHUB_TOKEN}' --profile web

dsh-panel mcp add --name web --http --url https://example.com/mcp \
  --header 'Authorization=Bearer ${MCP_TOKEN}' --profile web

# 进阶:整段 JS 表达式原样写进 !!js 标签
dsh-panel mcp add --name web2 --http --url https://example.com/mcp \
  --header 'Authorization=!!js `Bearer ${process.env.MCP_TOKEN}`' --profile web
dsh-panel mcp add --name github --stdio --command npx --args -y --args @modelcontextprotocol/server-github \
  --env 'GITHUB_TOKEN=!!js process.env.GITHUB_TOKEN' --profile web

dsh-panel mcp add --name web --http --url https://example.com/mcp \
  --header 'Authorization=!!js `Bearer ${process.env.MCP_TOKEN}`' --profile web

MCP 配置写入目标 profile 的 cordis.patch.yml 受管块;网关在线时自动热加载。面板块由 # >>> dsh-skill-mcp-panel:mcp:begin / # <<< ...end 标记,请勿手改块内内容。

更新插件

dsh-panel update                          # 升级全部已安装本插件的 profile
dsh-panel update --yes                    # 同上,不询问
dsh-panel update --profile web            # 只更新 web
dsh-panel mcp update                      # 等价于 dsh-panel update
  • 对比基准是每个 profile 自己 node_modules 里已装的版本,不是正在执行的那份 CLI 的版本。
  • 更新保持该 profile 原本的安装渠道:tarball 装的仍走 tarball(换成对应版本的版本化 URL),npm 装的仍走 npm 并钉到该版本, Git(或来源未知)装的仍用 github:Fishquito7/dsh-skill-mcp-panel#v<版本>。
  • 已经是最新的 profile 会被跳过,不会被重装。
  • desktop 由 DSH 桌面应用独占,宿主的 dsh plugin --profile desktop 会直接报错;自动枚举时跳过并说明, 显式 --profile desktop 时以退出码 2 报错。
  • 更新完成后:客户端 bundle 热更新(刷新页面即可),服务端改动需要重启对应 profile 的网关。

CLI 只扫描当前目录锚定的项目根与用户根;管理其他工作区的技能请加 --cwd <工作区路径>。 同名技能存在于多个作用域时,enable/disable/delete 需加 --global/--project/--workspace 指定操作哪一份。

工作原理

技能部分

页面和 dsh-panel skill 命令的每次操作,最终都是对磁盘上技能文件(SKILL.md)的改动,DSH 自带的文件监听器立刻发现变化——所以启用/停用、增删、迁移都热生效,无需重启网关。

  • 技能实体直接存放在其工作区的技能文件夹:全局 = ~/.dsh/skills,工作区 = <工作区>/.dsh/skills,没有隐藏存储或联接点——卸载插件后技能仍是普通文件,照常被 DSH 发现
  • 停用 = 把 SKILL.md 改名为 SKILL.md.disabled,启用 = 改回来
  • 改变所属位置 = 真实地把文件复制/移动到目标位置的文件夹(先校验、失败回滚)
  • 随部署附带的技能(bundled)为只读,不可停用或删除

MCP 部分

负责把 MCP 服务器配置写进 profile 的 cordis.patch.yml 受管块;真正连接和注册工具的是 DSH 官方插件 @deepseek-ai/dsh-mcp-client,由 DSH 的 HMR 自动加载。

开发

源码为 TypeScript,位于 src/;编译产物 lib/*.js 随仓库一起提交(保证 Git 直装可用)。 改完源码后运行 pnpm build:tsc 编译到 lib/ 并剥离浏览器束的多余模块标记。 发布时 npm pack 会通过 prepack 自动重新构建,无需手工编译。

卸载

dsh plugin --profile web remove dsh-skill-mcp-panel

更新日志

只列会改变使用方式的版本要点;完整改动见 Releases。

  • v2.1.5 —— 侧栏「技能」「MCP」合并成一行「Skill/MCP」(换用新的合并入口图标)+ 面板内页签(记住上次停留);新增「显示插件技能」开关;MCP 环境变量支持 ${NAME} 直觉写法(面板/CLI 自动格式化成 !!js,读回来仍是 ${NAME},不再被写坏成字面量)、MCP 页新增「注册机制」说明按钮,并为空字段补灰字示例;Windows 补上无扩展名的 bash shim;dsh-panel update 保持各 profile 原本的安装渠道(tarball / npm / Git),README 安装指引改用无版本号的稳定 tarball 链接
  • v2.1.3 —— 适配 DSH 0.2.0(peer 上界抬到 <0.3.0-0,否则宿主会在 profile 启动时禁用整行);MCP 表单里非法的服务器名不再只报一句网关「天书」
  • v2.1.2 —— mcp 子命令必须显式 --profile,错名一律拒绝且不会新建 profile;dsh-panel update 不带 --profile 时升级全部 profile;新增 dsh-panel profiles
  • v2.1.1 —— 适配 DSH 0.1.7 重命名的图标导出,技能页不再一片空白
  • v2.1.0 —— 面板从设置页迁移到主页侧边栏,每个面板带「← 返回会话」
  • v2.0.0 —— MCP 面板上线

链接

License

MIT