Introduction

Developers using multiple agent tools often face a scattered configuration: MCP servers and Skills are scattered across ~/.claude, ~/.cursor, ~/.codex, while cc-switch stores them in ~/.cc-switch/cc-switch.db. To reuse these configurations in DeepSeek Harness (referred to as DSH below), one must manually copy them one by one according to their respective formats.

DSH’s philosophy is “everything is a plugin”. Community developer MayBeTheWorld wrote dsh-inherit to address this migration issue: it automatically detects the four sources mentioned above, performs a dry run before writing, and imports MCP servers and Skills into DSH with one click. Below is an introduction to its features, installation, and usage.

What is it

dsh-inherit is a DSH community plugin, currently version 0.1.0, in the Developer preview stage; it is under the MIT license and has no official affiliation with DeepSeek. It imports MCP servers and Skills from Claude Code / Cursor / Codex / cc-switch into DSH with one click. The entry point is Settings → General → Import Agent Settings.

It is a “two-sided plugin”, containing both sides in a single package:

  • Host Side: Provides /api/dsh-inherit/sources and /api/dsh-inherit/run interfaces, restricted to loopback access only;
  • Browser Side: Inserts a row of entry ( settings.general.item ) in settings.general, which opens a centered Modal when clicked.

Core Features

Automatic Source Detection and Multi-format Parsing

The plugin scans ~/.claude, ~/.cursor, ~/.codex, and cc-switch (~/.cc-switch/cc-switch.db, read via Node’s built-in sqlite), and reports what each source contains. The parsing layer covers three formats: mcpServers JSON, Codex TOML, and cc-switch sqlite.

Select by Source and Category

There is a card for each agent in the popup window, with a toggle on the right side. By default, all are turned on, so you can import everything with one click without any adjustments. After expanding the source card, you can select by category: MCP servers and Skills will be imported; instructions, memory, and providers are only detected and marked as such, not imported by this plugin; Sessions are not supported.

Support status for each source:

Source MCP Skills Instructions Providers Memory Sessions
Claude Code Importable Importable Detect Only Detect Only Not Supported
Cursor Importable Importable Detect Only Detect Only Not Supported
Codex (TOML) Importable Importable Detect Only Detect Only Not Supported
cc-switch (sqlite) Importable Importable Detect Only Detect Only Not Supported

The annotations are generated based on capability awareness: the plugin will detect the currently loaded plugins responsible for specific capabilities (e.g., dsh-cc-switch) and explain this in the report, so it is effective for forks and renamed plugins as well.

Two-step Safety: Dry Run First, Then Write

  1. Click “Import Selected (Dry Run)”: only outputs a dry-run report, categorized as imported / skipped / notes, does not write any files;
  2. Click “Confirm Write”: executes after confirming the report, actually writing to disk, automatically generating a .bak-<timestamp> backup for the target file before writing.

The import is idempotent: servers/skills with the same name will be skipped, and will not be written repeatedly.

Write Location

  • MCP servers are written to the current profile’s cordis.patch.yml as @deepseek-ai/dsh-mcp-client rows, using the official composition layer; if ~/.dsh/mcp.json is automatically detected, it will be written as a fallback to the target.
  • Skills are copied to ~/.dsh/skills as SKILL.md directories, idempotently, skipping existing ones directly.

Installation and Usage

npm installation command (Note in original comment says “once published”, actual availability depends on the npm package):

# from npm (once published)
dsh plugin --profile web add dsh-inherit

If the npm package is not yet available, you can also install from a local checkout:

dsh plugin --profile web add "D:\path\to\dsh-inherit"

After installation, just open Settings → General → Import Agent Settings. The new bundle will hot-mount after a brief delay; if changes are made to the host module code, you need to restart dsh web.

Typical Usage

After the installation steps above, the daily import process is as follows:

  1. Open Settings → General → Import Agent Settings;
  2. The popup lists the detected sources, with toggles on the right defaulting to all on;
  3. Expand the source card and select by category (MCP / Skills …);
  4. Click “Import Selected (Dry Run)” to view the dry-run report (imported / skipped / notes);
  5. Click “Confirm Write” to apply it officially (backing up before writing).

If you only want to debug locally without writing to disk, you can directly use node --experimental-sqlite to run detectSources() and runImport(..., { target: 'patch', dryRun: true }):

node --experimental-sqlite -e "
import('./lib/import.js').then(m => {
  console.log(JSON.stringify(m.detectSources(), null, 1).slice(0, 2000))
  console.log(JSON.stringify(m.runImport([{source:'claude-code',categories:['mcp']}],{target:'patch',dryRun:true}), null, 1).slice(0, 800))
})"

This command only performs source scanning and dry-run import, writing nothing to any files.

Applicable Scenarios and Notes

Suitable scenarios: Using Claude Code / Cursor / Codex / cc-switch simultaneously and wanting to move existing MCP servers and Skills into DSH; hoping for an idempotent import with backups before writing.

Please note before use:

  1. This plugin is in Developer preview (0.1.0), is a community plugin, MIT licensed, and has no official affiliation with DeepSeek;
  2. The plugin runs with the permissions of the current dsh process; check the source code and license before installing;
  3. MCP credentials (env / headers) will be written in plaintext to cordis.patch.yml or ~/.dsh/mcp.json; pay attention to file permissions; ${VAR} references have not yet been converted to !!js process.env.VAR;
  4. Server names must match [A-Za-z0-9_-]{1,32} and be globally unique; MCP servers using sse / ws transport will be skipped with a warning;
  5. There are currently no doctor / restore commands; rolling back requires manual use of .bak files;
  6. Currently does not migrate hooks, slash commands, or sessions.

Summary

dsh-inherit focuses on a specific task: gathering MCP servers and Skills scattered across four tools into DSH, minimizing migration risk with a “dry run + confirmation” two-step process and .bak backups.

Project and Directory Pages:

  • GitHub: https://github.com/MayBeTheWorld/dsh-inherit
  • Community Directory: https://www.skillhub.cn/plugins/MayBeTheWorld/dsh-inherit (independent site, no official affiliation with DeepSeek / Huanfang)