Visual MCP manager for the DSH web UI: inspect, add, remove, enable/disable MCP servers and view their live connection status from Settings → MCP.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:Js2Hou/dsh-mcp-manager
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
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
Links
More in this category
zhu1090093659/dsh-web#packages/dsh-task-board★ 8178
Task board for the dsh web GUI: a sidebar multi-column kanban whose cards run in real DSH agent sessions and can also be scheduled with cron expressions, executed host-side even with the browser closed.
zhu1090093659/dsh-web#packages/dsh-web-all★ 8178
Plugin and skin collection for the DSH Web UI: task board, Git graph, right-side panel, remote mobile UI, pet, live token stats, and a skin center.
omdsh-dev/DSH-better-sidebar★ 3903
Full sidebar workbench with file rendering and editing, terminal, Git, and subagents; third-party plugins can register new tabs.
ccch1mneyyy/dsh-TUI★ 3815
Claude Code-style full-screen terminal UI: pixel-whale header, live status line, and streaming thought expansion.
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 3514
A fixed-corner whale widget for the DSH web GUI — balance, today's usage and per-turn cost with peak/off-peak pricing, editable balance-alert and daily-budget bubbles, a module-based custom bubble queue with A/B weighted choices and random lines or images, 30+ vendor templates (OpenAI, OpenRouter, Kimi, SiliconFlow, Ark, Zhipu, MiniMax and more) with per-model balance and subscription quota, plus task-end sound, imported audio, custom roles and a resource manager. Local-only, no telemetry.
Devin-AXIS/deepseek-design#deepseek-idesign★ 1711
Visual design studio for websites, app prototypes, posters, cards, reports, and magazines, with templates, direct element editing, selection-aware AI draft handoff, and export.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.