DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

Skill Mcp Tool — DeepSeek Harness 插件(DSH Plugin)
← Plugins
S

dsh-skill-mcp-tool

Skill Mcp Tool

DSH 插件:统一管理 Skills 与 MCP——提供设置菜单和主界面左侧栏两个入口,支持从 Git/URL 获取和更新 skills(可配置 Git 代理),并可对任意 Skill 和 MCP 服务器进行热加载启用/停用。适用于 DeepSeek Harness 的统一 Skills + MCP 管理器,支持通过热加载开关启用/停用、基于 Git 安装和更新 skill,以及可选的 Git 代理。

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

npx -y @deepseek-ai/dsh plugin --profile web add github:artorias-zj/dsh-skill-mcp-tool#56b5c2d29b8451f9c5d5bdf0b507f034b9b542f5
README兼容性版本

兼容性与来源证明

Skill Mcp Tool 以 dsh-skill-mcp-tool 发布,当前版本为 1.0.2。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/10/16

版本

1.0.2stable
2026/10/16
1.0.1stable
2026/10/13

相关插件

正在加载相关插件…

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

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

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

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

认领这个 Plugin →
报告问题
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录

相关插件

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

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Sdk Minimal@deepseek-ai/dsh-sdk-minimal独立的最小 SDK 配置包:JSON-RPC、一个 DeepSeek 适配器、持久化 Shell 和 JSONL 会话Sdk App@deepseek-ai/dsh-sdk-appdsh SDK 配置包:基于 dsh-base 提供 stdio JSON-RPC 服务和进程生命周期管理Experimental Inspector@deepseek-ai/dsh-experimental-inspector用于 Host 调试和 Client Runtime 检查的实验性跨 realm CDP hub

README

dsh-skill-mcp-tool

English | 中文

A DeepSeek Harness (DSH) plugin that puts Skills and MCP servers under one roof, reachable from both the settings menu and a main-interface sidebar entry — with hot-reload enable/disable toggles and Git-based skill install/update.

Features

Two entry points, one panel

  • Settings menu → "技能与 MCP" / "Skills & MCP" page.
  • Main interface → a sidebar icon row that opens the same panel in the centre column.

Both render the identical component, so the four tabs (Skills / MCP / Remote sources / Backup) behave the same wherever you open them.

Layout: the two entry points are handled separately

The host's layout contract differs between the centre panel and the settings page, so the shell has two modes selected by data-surface:

  • Centre panel (opened from the sidebar icon): the host supplies neither padding nor a scroll container, so the plugin provides both — centred content with breathing room (up to 48px per side, shrinking responsively on narrow windows) plus its own scrolling.
  • Settings page: the host already renders the section inside its content column (padding and scrolling included), so the plugin adds nothing on top — no doubled inset, no nested scrollbars.

Scrolling: long skill lists stay reachable, with no visible scrollbar

In the centre panel only the list scrolls while the title and tabs stay pinned to the top, so the refresh button and tab strip remain reachable even at the bottom of a long list, with breathing room after the last row.

No visible scrollbar at all: the wheel, trackpad, touch, and keyboard (arrow keys / PageUp / PageDown) all keep working — only the bar is no longer drawn. The horizontal insets therefore always equal the inner padding: symmetric left and right regardless of content length or whether scrolling is needed, with no sideways jump when a scrollbar would have appeared or disappeared. The same rules cover modals, so long forms still scroll.

scrollbar-gutter: stable is deliberately not used: it reserves scrollbar width even when the content fits (measured: stable 15px, stable both-edges 30px), leaving an empty band on a page that has nothing to scroll. All three hiding mechanisms are declared — scrollbar-width, -ms-overflow-style, and ::-webkit-scrollbar — so no browser falls back to a native bar that would skew the insets.

Ordering: alphabetical, always

List order is predictable, so you never have to hunt through entries:

  • Skills: grouped by source, with a fixed group order of project → user → plugin → other (it does not shift as skills come and go, so group headings stay put); alphabetical by name within each group.
  • MCP servers: managed and external rows are each sorted alphabetically by server name.
  • Remote sources: sorted alphabetically by repository label.
  • Sorting is case-insensitive: Chrome_DevTools_MCP sorts before REA, instead of all uppercase names clumping at the top. Only when two names are identical in lowercase does the raw string break the tie, keeping the order stable.
  • Managed rows are written to cordis.patch.yml in that same order, so the file and the UI never disagree.
  • Ordering is applied at the single choke point every write path goes through, so add/edit/enable/disable/delete can't bypass it.

Skills

  • Lists every skill from all four standard roots, in official rank order: project .dsh/skills (100) → project .agents/skills (200) → user ~/.dsh/skills (400) → user ~/.agents/skills (500).

  • Handles both layouts: directory bundles (<name>/SKILL.md) and flat files (<name>.md), plus nested/categorised trees.

  • Enable/disable is a lossless rename: SKILL.md ⇄ SKILL.md.disabled (or <name>.md ⇄ <name>.md.disabled). The official provider only recognises the exact filenames, so the skill leaves the catalog while its files and references/, scripts/, assets/ stay fully intact. The provider's watcher picks the change up on the next catalog refresh — no restart.

  • Malformed skills stay listed but flagged 格式不合规 / Invalid format, so you can fix or delete them rather than being unable to see them.

  • Plugin-registered skills (no file on disk) are listed read-only.

  • Create, edit, and delete skills through the built-in editor; frontmatter is validated before anything touches disk.

  • Install / update from Git: shallow-clone a repository (or a subdirectory of one), discover every valid skill inside, and copy it to the chosen root. Records the source so you can re-pull later; git ls-remote tells you whether an update exists.

  • Junk directories are filtered out on write: .git, .hg, .svn, node_modules, __pycache__, .venv and friends never land in the skill directory. When the repository root is the skill bundle (a SKILL.md at the top level), the clone's .git would otherwise be copied wholesale — worth several MB of commit history and remote URLs. The UI lists exactly what was skipped.

  • Type / in a session to pick a skill: this plugin registers the skills it manages into DSH's skill registry, so the / menu matches and invokes them directly. A skill marked disable-model-invocation: true appears only there (the model never sees it), and a skill shown as disabled in the UI never appears in /. Changes take effect immediately — no restart.

Proxy: a Git proxy field above the tabs

On many networks a direct git clone of a repository times out, which makes installing and updating skills impossible. A proxy bar sits above the four tabs — it is a prerequisite shared by every Git operation in every tab (install, update, check for updates), not a setting belonging to one of them.

  • Command-scoped, never global. The address is injected as git -c http.proxy=… -c https.proxy=… <subcommand>. Your global git config is never rewritten — try git config --global --get http.proxy before and after; it is untouched. The plugin only adds flags to its own calls.
  • Off means "leave it alone", not "clear it". With the switch off, no -c flags are added at all, so git falls back to whatever you configured globally (direct, or your own git config proxy). A git p-on-style global setting keeps working.
  • One Test button answers "is it the network or the repo?" It probes the remote twice — once through the proxy and once direct — and reports both, so you can see at a glance which path is broken. If git isn't installed at all, the install dialog says so separately.
  • Credentials are treated as secrets. A URL like http://user:pass@host:port has its password masked (http://user:***@host:port) everywhere it is sent to the browser, and is omitted from exported bundles unless you tick "Include MCP secrets". The field echoes the masked form; saving it unchanged, or editing only the host/port, keeps the stored password rather than clearing it. If a bundle carries a masked password and this machine has none, the import plan says so instead of writing an empty one that would fail confusingly later.
  • Supported schemes: http, https, socks4, socks4a, socks5, socks5h. A blank or malformed address is rejected with a readable reason rather than silently disabling the proxy.
  • The chosen proxy is applied before any clone during an import, so a bundle that carries a proxy can rescue a fresh machine that has no working direct route yet.

MCP servers

  • Add, edit, delete and toggle @deepseek-ai/dsh-mcp-client rows, and inspect servers declared elsewhere in config read-only.
  • Shows live state per server: enabled/disabled, reconnection phase, and how many tools are currently registered.
  • Secret handling: API tokens and headers are never read back to the browser — only key names. Editing preserves keys you didn't retype, and lets you delete individual keys explicitly.
  • Type ${MY_TOKEN} in any env or header value and it is written as a real !!js expression (\Bearer ${process.env.MY_TOKEN}`) — DSH has no ${VAR}interpolation, so this is the only mechanism that actually reads the environment. The!!js` tag round-trips byte-exactly through every edit.

Backup: export / import your setup (for moving machines)

The Backup tab packs everything this plugin manages — Skills + MCP servers + Git source records — into a single JSON file you can import on a new machine.

Two payload modes, chosen at export time:

ModeContainsSizeOn import
Recipe (default)Just the source: repository + commit + layoutusually a few KBRe-clones from the recorded repo — needs network
Full contentsThe skill files too (binaries as base64)can be several MBRestores files directly — works offline
  • Skills with no recoverable source always carry their contents, in either mode — otherwise they would be lost on the new machine. That is not left to the UI to get wrong.
  • Import reviews before it writes: the plan lists every entry's action (create / overwrite), conflicts, secrets that need re-entering, and blocked items. Nothing is written until you confirm.
  • Secrets are excluded by default. This plugin normally never returns a secret to the browser; exporting breaks that boundary, so it takes an explicit opt-in and then shows a plain-text warning. Without it, only key names are written and you are told which ones to fill in.
  • Import is idempotent: re-importing the same file overwrites rather than duplicating.
  • If an upstream repository has moved on, the import reports that the commit it got differs from the one exported.

Install

# From GitHub (recommended; works with any profile)
dsh plugin --profile web add github:artorias-zj/dsh-skill-mcp-tool

# The desktop profile also accepts the full URL
dsh plugin --profile desktop add https://github.com/artorias-zj/dsh-skill-mcp-tool

Or install from the DSH sidebar Plugins page by pointing at this directory. Then restart DSH so the client bundle is served.

Restart required. The plugin's client JavaScript is addressed by URL and cached by the browser/module system. Enabling the plugin compiles and mounts the host half immediately; the settings page and sidebar entry appear after a restart.

How hot reload works

DSH has no runtime API to add, remove, or restart an MCP connection. A server is a loader row, and the supported way to change it is to edit its configuration and let HMR remount the row. This plugin writes to the profile's cordis.patch.yml, which DSH's HMR watches, then polls the loader to confirm the row actually remounted.

  • MCP enable/disable sets the row's disabled boolean → HMR disposes or mounts the connection in place.
  • MCP add/edit rewrites the row → HMR swaps in a fresh connection. Tool names stay stable across the swap.
  • Skill enable/disable renames a file → the provider's watcher invalidates the catalog.

The panel reports what actually happened: when a change is written but the host has not finished remounting, it says so rather than claiming success.

Configuration isolation

MCP rows are written inside a dedicated managed block:

# >>> dsh-skill-mcp-tool:mcp:begin
- insert:
    - id: smt-mcp-<serverName>
      name: "@deepseek-ai/dsh-mcp-client"
      config: { ... }
# <<< dsh-skill-mcp-tool:mcp:end

Everything outside the markers is preserved byte for byte, so other plugins' managed blocks (for example dsh-skill-mcp-panel) and your hand-written rows are never touched. Rows owned by other tools appear as read-only "external" servers. Writes take a <file>.smt.lock lock and use an atomic temp-file rename, so a concurrent writer cannot corrupt the file.

Plugin configuration

Optional config on the row in cordis.patch.yml:

FieldDefaultMeaning
dshHome$DSH_HOME or ~/.dshHarness home used to locate skill roots, the profile patch, and the source record

Files it touches

PathPurpose
<profile>/cordis.patch.ymlMCP server rows, inside the managed block
<dshHome>/skills/**Skills it installs, creates, edits, or toggles
<dshHome>/skill-mcp-tool/sources.jsonIndex of Git install sources (an index only — deleting it never affects installed skills)
<dshHome>/skill-mcp-tool/settings.jsonPlugin settings — currently just the Git proxy. Kept out of cordis.patch.yml on purpose: this plugin owns only the bytes between its MCP markers

HTTP routes

All routes are same-origin, POST-only for writes, with an origin check that rejects cross-site requests.

RoutePurpose
stateSkills + MCP + sources + proxy + environment in one read
skill/set-enabled, skill/remove, skill/read, skill/writeSkill management
skill/install, skill/update, skill/check-updates, skill/forget-sourceGit sources
mcp/list, mcp/save, mcp/remove, mcp/set-enabledMCP management
proxy/get, proxy/save, proxy/testGit proxy: read / write / probe both paths
bundle/export, bundle/plan, bundle/importSettings export / review / import

Plugin Info

FieldValue
One-line valueUnified Skills + MCP manager with hot-reload toggles and Git-based skill install/update
CategorySkills & MCP
Supported profilesdesktop / web
CompatibilityDeepSeek Harness 0.2.x; Node.js ^22.15 or >=24; Windows / macOS / Linux
Permissions & servicesReads/writes the profile cordis.patch.yml and local skill roots; runs git for install/update (optionally through a proxy you configure); no telemetry
LicenseMIT

License

MIT

Why this plugin supplies its own provider: the host-level @deepseek-ai/dsh-skill-filesystem row is deliberately disabled by the web app (its comment reads “presets own local discovery”), leaving each agent preset to mount its own. On some presets that provider does not actually take effect — skills on disk then appear neither in / nor to the model. This plugin does not depend on the preset being correct; it registers the roots it manages itself.