Introduction

When developing with dsh, skills and MCP server configurations mostly fall into files: skills are individual SKILL.md files, and MCP servers are written in YAML lines within profile patches or global patches. To temporarily disable a skill or change a server parameter, one must leave the interface to edit manually; if also using Claude Code or Codex, the same batch of skills and MCP configurations needs to be maintained separately. dsh-plugin-capabilities solves these two problems: it allows managing skills and MCP servers in the dsh settings page and supports one-click import from other agents. The following introduces it in the order of features, installation, and typical usage.

What is this

dsh-plugin-capabilities is a dsh plugin maintained by qinyre, under the MIT license, with version 0.3.10 in package.json. It adds a top-level section “Skills and MCP” (parallel to “General Settings” and “Models”) to the settings page, containing three tabs: “Skills”, “MCP”, and “Market”. It works with both dsh web and DSH Desktop.

Core Features

Skills: Directory, Edit, and Toggle Loading

The “Skills” tab lists all skills currently discovered by dsh, including name, description, source, and invocation strategy. User-level skills are stored in $DSH_HOME/skills and can be created, edited, or deleted within the page; since 0.3.4, skills installed from the market or local repositories can also be edited in place.

The switch on each skill card controls whether that skill is loaded: when disabled, the plugin writes the following into the SKILL.md frontmatter of that skill:

disable-model-invocation: true
user-invocable: false

The rest of the file remains unchanged; reopening restores the default strategy. Skills from project directories and built-in packages are displayed as read-only, as are skills that are registered at runtime without files, which have no switch.

Syncing Skills from Claude Code and Codex

If ~/.claude/skills and ~/.codex/skills exist on the machine, they will be automatically included as additional scan roots for the skill directory. Files are not copied; changes are left in place, and both sides sync in real-time.

Skill Repositories: Local Directory and GitHub

Skill repositories support two types of sources:

  • Local directory: scanned directly.
  • GitHub repository: addresses support https://github.com/owner/repo and owner/repo. You can lock the version using #branch or /tree/branch. It downloads and unpacks via the GitHub tarball interface, so git does not need to be installed on the machine.

Repository records are persisted in $DSH_HOME/dsh-plugin-capabilities/state.json and can be backed up or manually corrected at any time.

Two Built-in Read-Only Skills

The plugin comes with two read-only skills that are loaded/unloaded with the plugin and do not write files to DSH_HOME:

  • skill-creator: from anthropics/skills, Apache-2.0.
  • find-skills: from vercel-labs/skills, MIT.

MCP: Management of Two Layers of Server Rows

The “MCP” tab manages MCP server rows in two layers: the current profile’s patch and the global patch DSH_HOME/cordis.patch.yml, supporting both stdio and streamable-http transport. Each row has two actions:

  • “Check”: Does not start the server—checks if the command exists in PATH for stdio rows, or sends a short timeout GET for http rows.
  • “Copy to Another Layer”: Moves the entire line configuration to the other layer without needing to delete and reconfigure.

Importing MCP Configuration from Other Agents

Supports one-click scan and import from Claude Code, Codex, Cursor, and Gemini CLI; you can also paste JSON (shape: mcpServers) into the input box and click “Parse and Fill”. Two notes:

  • Gemini’s SSE entries are not supported, as the dsh client does not recognize this transport.
  • Environment variable references like ${VAR} in Claude configurations are imported literally; they need to be manually changed back after import.

Market

The “Market” tab is divided into two parts: the skill market and the MCP market. Items can be installed/added with one click; since 0.3.0, clicking an item opens details. Installed items can be directly uninstalled.

Applying Changes: Restart within the Page

Changes to MCP rows only take effect in the combination after restarting dsh. The “Restart” button in the header of the MCP page provides this: in DSH Desktop, it automatically refreshes after restarting the sidecar; when running dsh web directly, the plugin launches an alternative process and then exits itself, refreshing the page automatically. Restarting interrupts ongoing rounds, and a confirmation dialog appears first when clicked.

Installation and Enablement

DSH’s philosophy is “everything is a plugin,” and this plugin itself is installed via the dsh plugin mechanism:

dsh plugin --profile web add dsh-plugin-capabilities

After installation, open the settings to see the “Skills and MCP” section in the top-level navigation. During development, you can also install directly from a local source code checkout:

dsh plugin --profile web add file:/path/to/dsh-plugin-capabilities

The prepare script in the package automatically builds out lib/.

Typical Usage

Migrating MCP Servers from Claude Code and Other Tools

  1. Open settings and go to the “MCP” tab under “Skills and MCP”;
  2. Initiate a one-click scan and import, covering Claude Code, Codex, Cursor, and Gemini CLI; or paste JSON containing mcpServers into the input box and click “Parse and Fill”;
  3. Check the import results: ${VAR} references in Claude configurations need to be manually changed back, and Gemini’s SSE entries are not supported;
  4. Click the “Restart” button at the top of the page, wait for the page to automatically refresh, and the changes will take effect.

Adding Skill Repositories from GitHub

  1. Add a GitHub repository on the skills page, using https://github.com/owner/repo or owner/repo as the address; add #branch or use /tree/branch when you need to lock the version;
  2. The plugin downloads and unpacks via the GitHub tarball interface, so git does not need to be installed on the machine;
  3. Skills in the repository enter the skill directory, and repository records are persisted in $DSH_HOME/dsh-plugin-capabilities/state.json.

Temporarily Disabling a Skill

Find the target card on the skills page and toggle the switch to off. The rest of the file content remains unchanged; open it again when needed to restore the default strategy.

Security and Implementation Highlights

  • Write operations have Same-Origin (CSRF) barriers and input validation;
  • Downloading and unpacking GitHub repositories is done by the plugin’s built-in pure JS tar reader; the sidecar never spawns any child processes.

Development and Testing

npm install
npm run typecheck
npm test
npm run build

End-to-end smoke tests are disabled by default. They require a deepseek-harness source code checkout in the same directory and Node ≥ 22.19:

DSH_DESKTOP_PLUGIN_SMOKE=1 npm test

Applicable Scenarios and Notes

Suitable for two types of users: those who primarily operate dsh via dsh web or DSH Desktop and want to maintain skills and MCP configurations within the interface; and those who use Claude Code, Codex, Cursor, and Gemini CLI simultaneously and want to consolidate existing skills and MCP configurations into dsh.

Please note before installation: the plugin runs with the permissions of the current dsh process and can read/write $DSH_HOME and skill files. It is recommended to check the source code and license (this project is MIT) first. Other points: changes to MCP rows require restarting dsh to take effect, and restarting interrupts ongoing rounds; skills from project directories and built-in packages are displayed as read-only, as are skills that are registered at runtime without files.

Conclusion

With the steps above, skills and MCP configurations that were originally scattered across various files can be consolidated into the dsh settings page for unified maintenance, and the cost of migrating from other agents is reduced to just a few scans and confirmations. The plugin directory page (community-maintained plugin directory, with no official affiliation to DeepSeek) and GitHub repository are as follows:

  • Directory page: https://www.skillhub.cn/plugins/qinyre/dsh-plugin-capabilities
  • GitHub: https://github.com/qinyre/dsh-plugin-capabilities