DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Skills Mcp Panel — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

dsh-skills-mcp-panel

Skills Mcp Panel

DeepSeek Harness Web GUI 的技能和 MCP 面板:从设置中列出、搜索、查看并快速切换技能和 MCP 服务器。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add dsh-skills-mcp-panel@0.2.0
README兼容性版本

兼容性与来源证明

Skills Mcp Panel 以 dsh-skills-mcp-panel 发布,当前版本为 0.2.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
npm
Registry 更新时间
2026/9/21

版本

0.2.0stable
2026/9/21
0.1.1stable
2026/9/21

相关插件

正在加载相关插件…

最新版
0.2.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
90.8 kB
文件数
7
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 0
周下载
0
最近提交
2026/9/21
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 ui-customization 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profile用于 Agent Teams Remote 和 UI 插件的实验性 Web 配置层Client Ui Task Board@linxin666/dsh-client-ui-task-board面向 DSH Web GUI 的主机权威任务面板,支持实际会话执行、主机 cron 调度以及可选的跨平台空闲睡眠保护;以挂载方式提供,无需修改 DSH 源代码。Web All@linxin666/dsh-web-allDSH Web UI 全家桶聚合插件:一键安装全部功能插件(task-board / git-graph / pet / remote-web-ui / web-ui-settings / skin-center / community-plugins / compat shim)。compat 桥接层已并入本包(src/client),无需独立 compat npm 包。

README

dsh-skills-mcp-panel

English | 中文

This project was generated by DeepSeek Flash. Every file here — both plugin halves, the tests, and this documentation — was written by the model running in DeepSeek Harness, from requirements and review by the project owner.

Skills & MCP panel for the DeepSeek Harness Web GUI. One Settings page under Agent presets that lists every skill and every MCP server this deployment composed, with a search box, a per-row status light, a state selector, and a details toggle.

Both kinds change without restarting the process:

What the selector writesWhen it lands
Skilldisable-model-invocation and user-invocable in the skill's SKILL.md frontmatter — the four states those two bits spell outthe skill provider watches the roots, so the next agent/pre-step republishes the catalog — same session
MCP serveran id-targeted disabled: true row in the profile's own cordis.patch.ymla patchReload: live profile re-applies the patch through config HMR, which reloads that server's connection in place — same session

Nothing else is touched: the panel never deletes a skill, never edits a server's configuration, and never reformats your patch file — see What it writes.

Install

The package ships ready to run: lib/ is the source of truth, there is no build step, and a git install needs no allowBuilds permission.

# from npm
dsh plugin --profile web add dsh-skills-mcp-panel

# from GitHub, if you would rather track the repository
dsh plugin --profile web add github:KyattoCat/dsh-skills-mcp-panel

# from a local checkout while developing
dsh plugin --profile web add link:/absolute/path/to/dsh-skills-mcp-panel

Whichever route you take, the installed package carries lib/, the two READMEs, cordis.patch.yml, and the license — and nothing else. tests/ and CONTRIBUTING.md stay in the repository.

Then restart the dsh web process once — installing a new bundle layer is the one operation the live patch reload cannot cover, because dsh.profile.bundles is read at boot. Every change after that is hot.

Remove it with:

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

Use it

Open Settings → Agent presets → Skills/MCP (the entry sits directly under the preset page). The page has:

  • a search box filtering by name, description, and path;
  • two tabs with live counts — skills and MCP servers;
  • groups, one per place a row comes from (see below), each with its own header, path, and count — a header is a toggle that collapses and expands its group;
  • one card per row: title, source, a colored status light, a state selector, and a details toggle (+ / −) styled like the selector beside it;
  • a details panel per card, showing description / when-to-use / root / path / body lines / model-invocable / user-invocable for a skill, and entry id / transport / command-or-URL / connection phase / tool count / tool names for an MCP server;
  • no standing footer: the page adds a message only when a change lands on a profile that will not act on it until the next dsh start.

Groups

Rows are grouped by the directory they belong to, so a skill you wrote for one project never looks like one you installed for every project.

The current project leads. The group of the project the GUI's current session runs in is pinned to the top of the list, starts expanded, and carries a Current project badge. Every other group starts collapsed. Clicking a header collapses or expands that one group, and a choice you make sticks until the page is reopened — a reload from a toggle does not undo it. A GUI with no session open falls back to the project the dsh web process itself runs in, and a session in a workspace this deployment never registered falls back the same way, so exactly one project group always leads rather than none. A pinned project that has no skills or servers of its own has no group to render, and the first group that does have rows opens instead.

Skills. Every scanned root maps to a group:

GroupRoots
Global$DSH_HOME/skills and $DSH_AGENTS_HOME/skills — the skills you own regardless of project
One per project<project>/.dsh/skills and <project>/.agents/skills, for every project the deployment knows: each workspace the Web GUI has opened, plus the harness process's own working directory
One per configured rooteach entry of skillRoots, named after its directory

A group header carries the group's name, its full path, and its row count.

MCP servers. A server has no directory of its own, so the panel takes the directory it runs in: a stdio server whose cwd sits inside one of those projects is grouped under that project, and every other server — HTTP servers, and stdio servers that inherit the harness process's directory — is Global.

Skill states

A skill's two frontmatter keys are independent, so it has four states and the selector offers all four:

Selectiondisable-model-invocationuser-invocableWho can load it
Enabledabsent (the default)absent (the default)the model routes to it on its own, and you can type /name
Manual onlytrueabsentyou only — the model never sees it in the catalog and cannot load it with the skill tool
Model onlyabsentfalsethe model only — it is not offered in the / menu or to /name
Disabledtruefalseneither surface; only trusted ctx.skills.get() callers

MCP states

An MCP row is a single enablement, so its selector offers Enabled and Disabled (localized to the interface language). A settled, active server carries no second label; a tag appears beside the selector only while the connection is unsettled — loading or failed — because that is a live fact rather than a setting. The same holds for a long tool list in the details panel: one name per line, and the box scrolls once it outgrows the card.

Status lights: green = the model can reach it (skill) or the server is connected (MCP), amber = manual-only (skill) or still connecting (MCP), red = a parse error (skill) or a failed connection (MCP), grey = disabled.

What it writes

Skills. Only the two invocation keys move. true is the provider's own default, so a state that needs it REMOVES the key instead of writing a redundant value: Enabled writes neither key, Manual only writes disable-model-invocation: true, Model only writes user-invocable: false, and Disabled writes both. A skill taken away from its default state and put back therefore returns to its original bytes, and an unrelated key never moves.

MCP servers. The panel owns one marked block at the end of the profile's cordis.patch.yml:

# >>> dsh-skills-mcp-panel (managed — edit these rows from the panel)
- id: "mcp-playwright"
  disabled: true
# <<< dsh-skills-mcp-panel

Everything outside those two fences is preserved byte for byte — comments, formatting, and your own rows included. The block is rewritten wholesale on every change, so it always lists exactly the servers currently disabled by the panel; re-enabling the last one removes the block and the file returns to its original bytes. The write goes through a temp file and a rename, so the patch watcher never sees a half-written document.

Configuration

All fields are optional; the defaults are what a stock dsh web needs.

FieldDefaultMeaning
patchPathauto-detectedThe patch file MCP selections are written to. Detection picks the profile under $DSH_HOME/profiles whose dsh.profile.bundles lists this plugin, preferring one with patchReload: live. Set it explicitly if you keep several profiles.
dshHome$DSH_HOME or ~/.dshHarness home; its skills subdirectory is scanned and its profiles directory is searched.
agentsHome$DSH_AGENTS_HOME or ~/.agentsShared agent root; its skills subdirectory is scanned.
projectRootprocess.cwd()The harness process's own project; its .dsh/skills and .agents/skills are scanned alongside every workspace the deployment knows.
skillRoots[]Extra skill roots, each forming its own group.
maxSkillProjects64Ceiling on how many workspaces one scan covers; project roots are sorted before the cap applies.
- id: skills-mcp-panel
  name: dsh-skills-mcp-panel
  config:
    projectRoot: /home/me/work
    skillRoots:
      - /home/me/team-skills

How it works

Two halves in one package, both plain JavaScript, no dependencies:

  • Host half (lib/index.js) registers two exact routes on ctx.webServer and answers them behind the composition's connection trust fence (the browser session cookie plus the Host/Origin check). GET /skills-mcp/state scans the skill roots and walks the Loader for @deepseek-ai/dsh-mcp-client rows; the browser sends the directory of its current session as ?cwd=, which is what decides the pinned group. POST /skills-mcp/toggle performs the write described above and answers with the same full snapshot, cwd included in the body, so a change never re-orders the page under the cursor.
  • Browser half (lib/client.js) is written directly in the client module system's lazy-CJS factory form (window.__ModuleLoader__.load({ id, factory })), so it needs no bundler and no shared build preset. It registers one settings.section contribution and takes only react from the module table.

Known limitations

  • A panel change is not a preset edit. A skill or MCP row that a preset's agent.cordis.yml provides is still composed at session creation; the panel's MCP selections target the profile patch layer, which applies to every session. Hiding a whole preset-provided row remains a preset edit, and a new session is what picks it up.
  • Startup-frozen profiles. headless, sdk, and acp default to patchReload: startup; the panel's MCP writes land there but apply at the next launch, and the page says so right after such a change. Skills stay hot everywhere, because the skill provider watches files rather than configuration.
  • Skills are read from disk, not from the registry. The panel mirrors the filesystem provider's discovery (top-level SKILL.md bundles and flat <name>.md files, dot-directories skipped) so it can rewrite the file that actually controls visibility. A skill supplied by a different provider appears in the model's catalog but has no file for this panel to change.
  • No import, create, or delete. The page changes what already exists; it never adds or removes a skill or a server.
  • MCP has no project-level source. DSH composes MCP servers from the profile, the harness home, and bundles — there is no per-project MCP file to read — so a server lands in a project group only when its own cwd points into that project. Everything else is Global, which is the truth rather than a gap.

Development

node tests/smoke.mjs   # drives both routes through a stub Cordis context in a temp dir

The smoke test asserts the two properties that matter most: disabling and re-enabling a skill restores the original bytes, and the same is true of the patch file around the managed block.

Packaging rules and the release steps live in CONTRIBUTING.md, because they are maintainer tasks rather than user instructions.

License

MIT