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-clientinstance):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.ymland 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-managerand install with one click; - dsh-plugin-marketplace: search for
js2hou/dsh-mcp-managerand 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 addregisters the dependency, detects the package'sdsh.bundle.patch, and adds it todsh.profile.bundles— no manualcordis.patch.ymledits 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-cliententries viactx.loader+ tool counts viactx.tools),add/remove/setEnabled/update(edits the profile patch layer, persisted and HMR-applied),probe(independent MCP SDK connectivity probe),patchInfo. Zero runtime@deepseek-aiimports (the js-yaml!!jsdialect andisJsExprare inlined), so it can be installed from any path. - Browser half (
src/client) registers the Settings → MCP section (settings.sectionslot, order 18), provides zh/en copy viactx.locale, and talks to the host exclusively over the RPC channel — it never touches the filesystem. - Test fixture —
test/fixtures/mcp-test-server.mjsis 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