Read-only runtime management panel for the official DSH MCP client: connection status, registered tools, errors, and reconnect counts through the /mcp command and a Settings tab, with sanitized display and enable/disable patch suggestions.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:PerryLink/dsh-mcp-panel
GitHub-sourced plugins run build scripts on your machine at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Read-only runtime management panel for the official DeepSeek Harness MCP client — see every MCP server's status, tools, errors, and reconnect counts, without touching your config.
English · 简体中文 · Español · Português · हिन्दी
🔭 Observability-first.
@deepseek-ai/dsh-mcp-clientkeeps its connection state private — logs only. This plugin shows everything it can observe (config, tool registry, loader state) and says "unknown" for what it cannot, instead of guessing. It also proposes the minimal upstream seam that would make status real: see the upstream proposal.
Compatibility
- Runtime: DeepSeek Harness ≥
0.1.0-rc.5(peer dependencies pin the0.1.0-rc.6package line). - Last verified: 2026-08-14 against a source checkout of deepseek-harness (workspace packages at
0.1.0-rc.5, mainline7b9644f) — headless/mcpend-to-end plus a live web profile; evidence in docs/research-notes.zh.md. Re-verified the same day against mainline47f9438with themcp/statusseam branch (feat/mcp-client-status-observability-seam): a realserver-everythingrow rendersstatus: connected (source: upstream-event)through the packed plugin, plus the launcher-faithful compat flow; record in docs/optimization-plan-v2.zh.md.
What you get
| Surface | What it shows |
|---|---|
/mcp command |
transport, target, tool count, connection status, last error, reconnect count — model-readable, session-log reconstructable, bilingual (outputLanguage: en|zh) |
| Settings → Plugins → MCP tab | the same snapshot read-only, with status badges, expandable tool lists, sanitized errors, probe results |
| Panel probe button | one-click connectivity probe of one streamable-http server from the tab; results stay panel-only |
| Passive probes | optional background reachability badges per server, kept separate from connection status |
| Auto refresh | the host suggests a refresh interval (refreshIntervalMs); the tab polls and pauses while hidden |
/mcp <server> disable|enable |
the exact cordis.patch.yml line to apply — a suggestion, never a write |
mcp_probe tool |
one-shot Streamable HTTP connectivity probe as a background job; results are panel-only |
Quick start
# git channel (builds via the package's prepare script)
dsh plugin --profile web add github:PerryLink/dsh-mcp-panel#v0.2.0
# npm channel (published tarball, no build approval needed)
dsh plugin --profile web add dsh-mcp-panel@0.2.0
Then restart (or let the web surface hot-reload its cordis.patch.yml) and:
/mcp
/mcp everything tools
/mcp everything disable
MCP servers (1):
- everything [mcp-everything] stdio node …/server-everything/dist/index.js
| 13 tools | enabled | status: unknown (source: derived) | reconnects: — | last error: —
Manual install: put dsh-mcp-panel into the profile's node_modules (or the shared
$DSH_HOME/profiles/node_modules fallback) and add the row to cordis.patch.yml:
- insert:
- id: mcp-panel
name: dsh-mcp-panel
config:
probeEnabled: true
probeTimeoutMs: 10000
Uninstall
- Remove the
mcp-panelrow fromcordis.patch.yml(the web surface hot-reloads it; other surfaces restart). - Delete the package from the profile's
node_modules(or the sharedprofiles/node_modulesfallback). - Verify with
dsh web --dump-configthat nomcp-panelrow remains.
Honest by contract
- Read-only. No configuration file is ever written.
disable/enableprints a suggestion you apply yourself. - No fake status. Connection fields without upstream data read
unknown/—, withstatusSource: derived. - Sanitized display. URL query credentials, userinfo passwords, header values, bearer tokens, and JWTs are redacted before rendering; configured
headersnever enter any snapshot. - Panel-only results. Probe details live in the settings tab, never in model context;
/mcpoutput is the model-readable surface and is fully reconstructable from the session log. - No mcp-client changes. Transport, OAuth, and protocol stay untouched — the observability gap is covered by the upstream proposal, which this plugin already consumes (typed
mcp/statusevent +mcpStatusquery service, feature-detected at runtime).
Configuration
| Field | Default | Description |
|---|---|---|
probeEnabled |
true |
Register the mcp_probe tool (needs ctx.jobs in the composition) |
probeTimeoutMs |
10000 |
Per-probe timeout |
maxProbes |
10 |
Cap on probe records shown in the panel |
refreshIntervalMs |
0 |
Suggested panel refresh interval in ms (0 = on demand only) |
outputLanguage |
en |
Output language of the /mcp command (en | zh | es | pt | hi) |
passiveProbeEnabled |
false |
Periodically probe streamable-http servers in the background |
passiveProbeIntervalMs |
60000 |
Passive probe interval in milliseconds |
Permissions & data
- Reads: loader entries, the tool registry (
mcp__<server>__names), and — when upstream ships it —mcp/statusevents. - Writes: none. No configuration file is ever modified.
- Network: only the one-shot
mcp_probe(and the optional passive probe) POSTs one MCPinitializerequest to endpoints you configured; configured headers are used for the request and are never displayed or logged. - No telemetry, no external services, no background work beyond the optional probe timers.
Troubleshooting
- Row not visible? Run
dsh web --dump-configand check that themcp-panelinsert landed with a unique id. - Panel shows
status: unknown (source: derived)— expected until the upstream seam lands; see docs/upstream-proposal.md. - Panel looks stale? Set
refreshIntervalMsto a positive value (e.g.5000) in themcp-panelconfig row to poll automatically. - Boot log shows a FAILED
mcp-panelfiber — the package must resolve from the profile (barename: dsh-mcp-panelresolves via the profile'snode_modulesor the shared fallback). - Rollback: remove the row (see Uninstall).
Security
Found a security issue? Open a GitHub issue without pasting secrets, keys, or tokens — redact everything first. This plugin holds the credentials of your configured MCP servers only in memory for probe requests; they never reach logs or snapshots.
How it works
- Host half — a
mcpPanelTypert Remote service assembles the snapshot from three read-only sources: loader rows (@deepseek-ai/dsh-mcp-cliententries),ctx.tools.schemas()grouped by themcp__<server>__namespace, and upstreammcp/statusobservations. The hand-written./typertmanifest registersmcpPanel/statuswith the gateway;zodis bundled, so the host bundle is self-contained. - Browser half — a
dsh.clientbundle (served at/plugins/dsh-mcp-panel/client.js) mounts the same descriptor viactx.remote.$mountand registers a read-onlysettings.plugins.tabentry (id: mcp). The presenter is a pure function; styles are scoped and token-driven. - The
/mcpcommand goes through the standard command registry — every line lands incommand/run+command/donesession events.
Development
pnpm install
pnpm run typecheck
pnpm test # 96 tests: sanitizer extremes, grouping, aggregation tolerance, command output (5 languages), probe gating, client wiring, presenter
pnpm run build # tsc declarations → lib/types; tsdown → lib/index.js + lib/typert.host.js + lib/client.js
pnpm run verify:self-contained
pnpm pack
Verification against a real harness checkout:
node --import tsx/esm scripts/verify-headless.mjs boots the full web profile in process (ephemeral port) and prints the exact /mcp, /mcp <server> tools, and /mcp <server> disable output.
License
Apache License 2.0 © 2026 dsh-mcp-panel contributors
Links
More in this category
hust-open-atom-club/oh-dsh★ 161
Community distribution: TUI, desktop, and Web UI as one bundle with layered installation.
Jayden-X-L/forkprobe★ 65
Compare multiple skills on the same task and pick the winner.
vlln/plugin-registry★ 33
Ecosystem infrastructure: a thin browser console for managing official repository plugins (zero patches) plus a make-dsh-plugin skill for guided plugin development.
forrestchang/dsh-multica-runtime★ 28
Run the dsh runtime on Multica.
DietCokewithSugar/dsh-user-experience★ 18
Finds potential UX issues in your project: automatically reviews React/TypeScript code, pinpoints each problem, and gives concrete suggestions.
omdsh-dev/dsh-plugin-check★ 17
Plugin health checks: manifest protocol / patch format / build traps, zero-dependency and read-only.