Skip to content
dsh-market Browse plugins GitHub 中文

Js2Hou/dsh-mcp-manager

Visual MCP manager for the DSH web UI: inspect, add, remove, enable/disable MCP servers and view their live connection status from Settings → MCP.

Stars ★ 6 Category UI Enhancements Listed 2026-08-16

Install

Inside DeepSeek Harness, with dsh-market

dsh plugin --profile web add dshmarket

Or from the command line

dsh plugin --profile web add github:Js2Hou/dsh-mcp-manager

Installing runs third-party code with your own permissions — it can read your files, use your credentials and reach the network. Review the source first, and pin a commit (github:owner/repo#sha) when you can.

Screenshots

README

✨ Features

  • 📋 Server list — every installed/enabled MCP server (@deepseek-ai/dsh-mcp-client instance): serverName, transport (stdio / streamable-http), URL / command, enabled state, loader phase, registered tool count
  • ➕ Add / ➖ Remove — validated form for stdio and streamable-http servers (env / headers / args / timeout / failOnStartupError), duplicate id/serverName rejected; one-click removal
  • 🔌 Enable / Disable — toggle anytime; tools hot-connect / hot-disconnect
  • 📶 Connection status — live status pill per server (Connected · N tools / Failed / Loading / Disabled) plus an independent Test probe (initialize + tools/list) reporting latency and tool count
  • ✏️ Edit — the edit form opens in place of the card being edited; save applies immediately
  • 🌏 Localized — UI copy follows the DSH language (zh / en) in real time
  • 💾 Persistent — every mutation is written to the profile's cordis.patch.yml and survives restarts; the footer shows the file path

🚀 Install

Listed on dsh-market and dsh-plugin-marketplace.

Prerequisites: DSH installed and running (dsh web works).

Option 1 · AI agent install

Tell your agent: "Please install the dsh-mcp-manager plugin from https://github.com/Js2Hou/dsh-mcp-manager"

Option 2 · Plugin marketplace (recommended)

Pick one of the marketplaces:

  • DSH Desktop (community desktop build): built-in plugin market — pick the DSH 1024Store or dshfind source and search for js2hou/dsh-mcp-manager (several plugins share that name — pick the one by Js2Hou);
  • dsh-market: search for js2hou/dsh-mcp-manager and install with one click;
  • dsh-plugin-marketplace: search for js2hou/dsh-mcp-manager and install with one click.

Option 3 · dsh CLI

dsh plugin --profile web add @js2hou/dsh-mcp-manager

Or install straight from GitHub (the built lib/ bundles are committed, so no local build is needed):

dsh plugin --profile web add github:Js2Hou/dsh-mcp-manager

macOS / Linux (also Git Bash / WSL on Windows):

curl -fsSL https://raw.githubusercontent.com/Js2Hou/dsh-mcp-manager/main/scripts/install.sh | bash

Windows (PowerShell 5.1+ / pwsh):

irm https://raw.githubusercontent.com/Js2Hou/dsh-mcp-manager/main/scripts/install.ps1 | iex

Then hard-refresh the browser (Cmd/Ctrl+Shift+R) and open Settings → MCP. If the MCP tab does not appear, restart DSH once (first-time host mounting).

macOS / Linux (bash):

cd ~/.dsh/profiles/web

# ① Exclude a freshly published version from pnpm's 24h minimum-release-age
printf '\nminimumReleaseAgeExclude:\n  - @js2hou/dsh-mcp-manager\n' >> pnpm-workspace.yaml

# ② Install + auto-mount (npm package; use an absolute link: path for a local checkout)
npx -y --package @deepseek-ai/dsh dsh plugin --profile web add @js2hou/dsh-mcp-manager

Windows (PowerShell):

cd ~\.dsh\profiles\web

# ① Exclude fresh versions (one-time; merge the line if the key already exists)
Add-Content -Path pnpm-workspace.yaml -Value "`nminimumReleaseAgeExclude:`n  - @js2hou/dsh-mcp-manager"

# ② Install + auto-mount
npx -y --package @deepseek-ai/dsh dsh plugin --profile web add @js2hou/dsh-mcp-manager

dsh plugin --profile web add registers the dependency, detects the package's dsh.bundle.patch, and adds it to dsh.profile.bundles — no manual cordis.patch.yml edits needed.

Local development: clone the repo and run bash scripts/install.sh from its root (Windows: powershell -ExecutionPolicy Bypass -File .\scripts\install.ps1); the script detects the checkout and installs it into ~/.dsh/profiles/web via link:. Or pass the path explicitly: dsh plugin --profile web add "link:C:/absolute/path/dsh-mcp-manager".

dsh plugin --profile web add @js2hou/dsh-mcp-manager

Or re-run the one-liner; alternatively bump the version in ~/.dsh/profiles/web/package.json and run pnpm install. Local-checkout mode: git pull then pnpm build (client changes need only a hard refresh; host changes need a DSH restart).

Symptom Cause / fix
Not found in the plugin marketplace Marketplace data syncs daily. Search again later, or install via Option 3 (dsh plugin ...).
minimum release age / version < 24h The published version is younger than 24h. Wait, or re-run (the script appends minimumReleaseAgeExclude).
"Profile not found" Run dsh web once to initialize ~/.dsh/profiles/web.
Two MCP tabs Double-mount: a stale manual - insert: ... mcp-manager ... row still lives in cordis.patch.yml — delete it (the script does this automatically).
No MCP tab after install Hard refresh (Cmd/Ctrl+Shift+R); if still missing, restart DSH once (first-time host mounting).
Obsidian MCP returns 401 Check the header format: Authorization: Bearer <api-key> without surrounding quotes (the form now strips quotes from pasted "Key": "value" lines).
Config change not applied All mutations hot-apply via HMR within 1–2s; use the manual refresh button in the page header if needed.

📖 Usage

Open Settings → MCP:

  • Add server — fill in the entry id, serverName, transport, and transport-specific fields (streamable-http: URL; stdio: command / args / env / cwd). The panel validates format and rejects duplicate ids / serverNames.
  • Each card shows the live status, target, and tool count, with Enable / Disable, Test (connectivity probe), Edit (inline form), and Remove.
  • The footer shows the patch file being edited.

⚙️ Configuration

The plugin's loader row accepts one optional field:

Field Description
patchFile Absolute path of the user patch layer to edit. Defaults to $DSH_HOME/profiles/web/cordis.patch.yml.

🏗️ Architecture

  • Host half (src/index.ts) registers a loopback-only Connection RPC channel /mcp-manager: list (enumerates @deepseek-ai/dsh-mcp-client entries via ctx.loader + tool counts via ctx.tools), add / remove / setEnabled / update (edits the profile patch layer, persisted and HMR-applied), probe (independent MCP SDK connectivity probe), patchInfo. Zero runtime @deepseek-ai imports (the js-yaml !!js dialect and isJsExpr are inlined), so it can be installed from any path.
  • Browser half (src/client) registers the Settings → MCP section (settings.section slot, order 18), provides zh/en copy via ctx.locale, and talks to the host exclusively over the RPC channel — it never touches the filesystem.
  • Test fixturetest/fixtures/mcp-test-server.mjs is a minimal MCP stdio server for end-to-end verification.

Development

pnpm install
pnpm typecheck   # tsc --noEmit; tsconfig paths point at your DSH install's lib/types
pnpm build       # esbuild: lib/index.js (host) + lib/client.js (ModuleLoader browser bundle)

License

MIT

Content from the project README on GitHub ↗