At a glance
What it does
A DeepSeek Harness web console for inspecting, configuring, and trial-calling MCP servers.
Web Profile
>=0.1.2-rc.1 <0.2.0, including declared 0.1.2-rc.1 and 0.1.5-alpha.1
Evidence-verified
Checked Sep 9, 2026, 2:21 PM UTC
Code-evidenced contributions
What it adds to DSH
Adds a Settings → Plugins → MCP tab for server status, diagnostics, configuration fragments, and tool trials.
Mechanism evidence ↗Lists configured MCP servers and supports tool listing, health guidance, and trial calls through the official tool pipeline.
Mechanism evidence ↗Before you choose it
dsh-mcp-panel adds an MCP tab under Settings → Plugins and a /mcp command. It shows configured server status, tool counts, diagnostics, and reconnect information; it can generate server add, edit, or disable patch fragments and trial-call MCP tools through the official tool pipeline.
Best for
DeepSeek Harness users who operate MCP servers and want a visual status and configuration surface instead of editing every server row by hand.
Common tasks
- Inspect configured MCP servers, their tools, status, errors, and reconnect counts.
- Generate and review append-only profile-patch fragments for adding, editing, or disabling an MCP server.
- Run a selected MCP tool with JSON arguments through the official tool pipeline.
- Use an optional Streamable HTTP connectivity probe or background passive probes.
Permissions and data
The manifest declares outbound network access and no native code. The plugin may make approval-gated profile-patch writes when enabled.
Permissions- network:outbound
- native-code:none
- The supplied documentation says URL credentials, passwords, header values, bearer tokens, and JWTs are redacted before rendering.
- The supplied documentation says configured headers do not enter snapshots and editor views expose header keys rather than values.
- Profile changes are described as append-only patch operations with backups.
- Configured MCP servers and optional Streamable HTTP probe endpoints.
- No plugin-specific credential requirement is declared; credentials may be part of a configured MCP server and should be handled carefully.
Limitations
- Resources and Prompts are described as pending upstream support; the official bridge currently covers tools.
- Some connection fields can remain unknown when upstream observations are unavailable.
- The supplied evidence does not demonstrate a successful installation, runtime test, or actual network call.
- The package declares a prepare lifecycle script.
What DSHub checked
- The pinned source commit, bundle manifest, and Cordis patch structure were verified.
- The manifest declares a web client surface, outbound-network permission, Node requirement, and DeepSeek Harness peer-dependency ranges.
- The package is Apache-2.0 licensed.
What DSHub did not check
- Installation, hot reload, profile-write behavior, probes, tool trials, and diagnostics were not executed during this curation.
Pinned install
Install dsh-mcp-panel
This plugin bundle does not have a DSH Plugin install action. Use its source documentation for the delivery method.
Maintainer source
Project README
dsh-mcp-panel
- 1024 store channel:
npm i -g dsh1024once, thendsh1024 plugin --profile web add dsh-mcp-panel(counts toward the deepseek1024.com install ranking).
The MCP management console for the official DeepSeek Harness MCP client — add, edit, remove, and trial-call MCP servers from a settings page, with honest status, health diagnostics, and safe, reversible profile writes.
Official client = bridge, this plugin = console: read status through the mcp/status seam, write only append-only, approval-gated profile patches.
Official repository. This is the only official repository of dsh-mcp-panel, maintained by PerryLink. Same-name repositories under other accounts are not affiliated.
English · 简体中文 · Español · Português · हिन्दी
</div>Compatibility
| Surface | Status |
|---|---|
| Harness | DeepSeek Harness dsh-v0.1.5-alpha.1 (GitHub tag, verified 2026-09-09) (adapted 2026-09-09): the session envelope keeps its ignorable field for stored-log read compatibility only - Session.append still cannot stamp it, so audit-gate behavior is unchanged. Verified 2026-09-09 against the dsh-v0.1.5-alpha.1 master checkout (full gate chain + profile install smoke). |
| Node | ^22.19.0 || >=24.0.0 |
| Platforms | Web GUI (dual-face: host + browser) |
| Model | Any (the panel is read-only; only /mcp output is model-readable) |
What you get
dsh-mcp-panel is the experience layer on top of the official MCP client: a read-only runtime view plus safe, reversible profile writes.
/mcpcommand — one row per server: transport, target, tool count, connection status (from the upstream seam;unknownwhen unobserved), last error, reconnect count — model-readable, session-log reconstructable, five output languages./mcp <server> tools— model-visiblemcp__*tool names and descriptions./mcp <server> health— derived self-heal suggestions (ENOENT → missing dependency, ECONNREFUSED, timeouts, 401/403/404, DNS, rate limit, reconnect exhaustion…); exit code / stderr tail honestly labeled pending upstream support until the client exposes them./mcp <server> call <tool> [json]— trial-call through the official tool pipeline (ctx.tools.execute()); pre-execute permission policy, approval, guards, and post-execute all apply.- Settings → Plugins → MCP tab — status cards with badges, diagnostics, and probes, plus the server CRUD and the tool trial console.
- Server CRUD — add/edit/remove forms →
insert/set/set disabledfragments → clipboard copy or approval-gated write with automatic backups. - Recommended directory — a built-in community MCP server catalog (filesystem, git, github, fetch, playwright, …) served in the snapshot;
catalogEntriesappends/overrides entries, andcatalogToConfigInputturns one into a one-click add. - Config import/export —
exportConfigs()serializes the server rows to a versioned JSON document (a!!jsrow exports asnullwith a reason), andimportPreview()parses an export back into per-serveraddpatch fragments for review. - Tool trial console — server →
mcp__*tool → JSON args → canonical JSON result + rendered content; capped bytrialMaxResultChars; panel-only, never model context.
Architecture: official client = bridge, this plugin = console
@deepseek-ai/dsh-mcp-client is the only bridge: one plugin instance per MCP server, configured as a hand-written cordis.yml row, connecting the transport, syncing tools, and registering mcp__<server>__<tool> names. This plugin never replaces it — it is the experience layer on top:
┌────────────────────────────────────────────┐
profile │ cordis.yml / cordis.patch.yml │
composition │ - id: mcp-github │
(one row per │ name: '@deepseek-ai/dsh-mcp-client' │
server, hand- │ config: { serverName, transport, … } │
written) │ - id: mcp-panel │
│ name: dsh-mcp-panel ◄── this plugin │
└───────────────┬────────────────────────────┘
│
┌───────────────────────────┴───────────────────────────┐
│ │
┌────▼──────────────┐ ┌───────────────────────────┐ │
│ @deepseek-ai/dsh- │ │ dsh-mcp-panel (console) │ │
│ mcp-client │ │ │ │
│ • transport │ │ • /mcp command │ │
│ • tool sync │ │ • Settings → Plugins → │ │
│ • mcp__* tools │◄──────►│ MCP tab: CRUD, trial │ │
│ • mcp/status seam │ status │ • health diagnostics │ │
└───────────────────┘ │ • probes, capabilities │ │
└───────────────────────────┘ │
The console reads the client through its proposed mcp/status observability seam (not yet shipped upstream; feature-detected) (event + mcpStatus query service), the tool registry, and the loader; it writes only the profile's patch layer — append-only, approval-gated, always backed up. Transport, OAuth, and protocol stay untouched.
Console vs. hand-written cordis.yml
| Hand-written cordis.yml | dsh-mcp-panel console | |
|---|---|---|
| Add a server | Edit YAML, mind indent/quoting | Form → patch fragment → copy or write (approval + auto backup) |
| Edit a server | Edit YAML, restart/hot-reload | Form pre-filled from the live row; unchanged secrets keep their raw values host-side |
| Remove a server | Delete the row | set disabled: true operation (the patch vocabulary has no remove) — re-enableable anytime |
| See status | Read logs | Badges + reconnects + last error, live from the mcp/status seam |
| Try a tool | Ask the model to call it | Trial console → official ctx.tools.execute() pipeline (permission & approval stay in force) |
| Diagnose failures | Grep logs | /mcp <server> health with derived self-heal suggestions |
| Mistakes | Manual revert | Every write is append-only and leaves a timestamped backup |
The console's output IS cordis.patch.yml vocabulary — the same lines you would write by hand, generated, previewed, and applied safely.
Quick start
# 1. install the bundle into your profile
dsh plugin --profile web add "github:PerryLink/dsh-mcp-panel#main"
# or from npm (published releases)
dsh plugin --profile web add dsh-mcp-panel
# 2. restart and verify the row
dsh --profile web --dump-config | grep -A3 'id: mcp-panel'
Then open Settings → Plugins → MCP, or run:
/mcp
/mcp everything tools
/mcp everything health
/mcp everything call echo '{"message": "hi"}'
Install & uninstall
- git channel (latest
main):dsh plugin --profile web add "github:PerryLink/dsh-mcp-panel#main"— thepreparescript builds with production dependencies only. - npm channel (published releases):
dsh plugin --profile web add dsh-mcp-panel. - tarball channel:
pnpm packin this repo, thendsh plugin --profile web add ./dsh-mcp-panel-<version>.tgz. - uninstall: remove the
mcp-panelrow fromcordis.patch.yml(the web surface hot-reloads it), delete the package from the profile'snode_modules, and verify withdsh web --dump-configthat nomcp-panelrow remains.
Configuration
All tunables are Schemastery Config fields (changeable from cordis.yml). cordis.patch.yml documents each key inline.
| Key | Default | Meaning |
|---|---|---|
probeEnabled |
true |
Register the mcp_probe background-job tool (panel-only results) |
probeTimeoutMs |
10000 |
Per-probe timeout in ms |
maxProbes |
10 |
Probe records shown in the panel |
refreshIntervalMs |
0 |
Suggested panel refresh in ms; 0 = on demand |
outputLanguage |
en |
/mcp output language: en | zh | es | pt | hi |
passiveProbeEnabled |
false |
Periodically probe streamable-http servers |
passiveProbeIntervalMs |
60000 |
Passive probe interval in ms |
trialEnabled |
true |
Tool trial console (settings tab + /mcp call) |
trialTimeoutMs |
120000 |
Panel-side deadline per trial call in ms |
trialMaxResultChars |
60000 |
Cap on the trial result payload in chars |
writeEnabled |
true |
Kill switch: false rejects every profile write (copy still works) |
backupCount |
5 |
cordis.patch.yml backups retained per write |
catalogEntries |
[] |
User overlay for the recommended server directory: entries append, an entry with the same id replaces the built-in one |
Tools & surfaces
| Surface | Kind | Notes |
|---|---|---|
/mcp |
command | Per-server status row; model-readable and log-reconstructable |
/mcp <server> tools |
command | Model-visible mcp__* tool names + descriptions |
/mcp <server> health |
command | Derived self-heal suggestions from sanitized error text |
/mcp <server> call <tool> [json] |
command | Trial-call through the official tool pipeline |
mcp_probe |
tool | Optional Streamable HTTP connectivity probe (background job) |
| Settings → Plugins → MCP tab | UI slot | Status cards, server CRUD, and the tool trial console |
mcpPanel Typert Remote |
service | Read-only snapshot channel (host → client) |
Resources & Prompts
The official client documents that "Tools are the only bridged MCP capability" — Resources and Prompts are deferred. The console feature-detects a proposed upstream catalog seam and will show read-only lists the day it ships; until then the capabilities board marks both pending upstream support.
Permissions & data
- Permissions: the
dshWorkshopmanifest declaresnetwork:outboundandnative-code:none. - Data: the panel is read-only; it writes only append-only
cordis.patch.ymlfragments (approval-gated, backup-first). URL query credentials, userinfo passwords, header values, bearer tokens, and JWTs are redacted before rendering; configuredheadersnever enter any snapshot, and env/header values never leave the host (the editor sees keys only).
Security boundaries
- The bridge stays the bridge. No transport, OAuth, or protocol changes; one mcp-client row per server, exactly as hand-written.
- No fake status. Connection fields without upstream observations read
unknown/—withstatusSource: 'derived'; exit codes and stderr tails are never invented. - Writes are append-only, approval-gated, and backed up. The console never rewrites
cordis.patch.yml; it appends generated operations and keeps the newestbackupCountbackups. - No prompt injection. The panel registers no prompt sections; its only model-facing text is the two tool/command descriptions.
Known limitations
- Resources & Prompts are pending upstream support — the official client bridges tools only.
- Exit codes / stderr tails are labeled pending upstream support until the client exposes them.
- Read-only panel — the console never fakes a connection state; unobservable fields read
unknown/-1/—.
Development
pnpm run typecheck && pnpm run typecheck:ci && pnpm test && pnpm run build && pnpm run verify:self-contained && pnpm run verify:artifacts && pnpm pack
scripts/verify-headless.mjs boots the real web profile and prints the exact /mcp output. Releases: node scripts/release.mjs <x.y.z> runs the full gate, commits, and tags v<x.y.z> locally (never pushes).
Topics
dsh, dsh-plugin, deepseek-harness, deepseek, cordis, mcp, mcp-client, observability, panel
Contributors
- @PerryLink — creator and maintainer.
- @xiaoyuyu6420 — diagnosed the missing client devDependencies behind clean-checkout build failures (PR #5).
- @feiler0 — contributed the stdio MCP server probe (one MCP initialize handshake over stdin/stdout) (PR #7, merged as PR #15).
PerryLink DSH Plugin Family
This project is one of the 37 DeepSeek Harness plugins maintained by PerryLink. If this one helps you, the others likely will too:
| Plugin | One-liner |
|---|---|
| dsh-auto-review | Second-model auto-review on the approval chain, fail-closed by default |
| dsh-background-agents | Durable background child agents with a Web UI sidebar, messaging and interrupt |
| dsh-budget | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. |
| dsh-checkpoint-rewind | Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore |
| dsh-claude-move | Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH |
| dsh-click | Cross-platform native desktop control for DeepSeek Harness — Windows first. |
| dsh-composer-history | Terminal-style input history for the web composer: arrows, Ctrl+R search |
| dsh-data-quality | Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here) |
| dsh-defend | Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness. |
| dsh-doublecheck | Engineering-discipline guard: requirements grill, test gates, adversary review |
| dsh-draw | Unified static-image generation routing for DeepSeek Harness. |
| dsh-fast | Read-only performance diagnostics for DeepSeek Harness. |
| dsh-fund-research | Deterministic research reports for Chinese public mutual funds |
| dsh-github | GitHub PR/issues integration for DSH, every write gated by approval |
| dsh-industry-research | Industry research orchestration that seals its deliverables through this plugin's ctx.researchReport.assemble |
| dsh-library | Local document knowledge base for DeepSeek Harness. |
| dsh-local-ai | Local-model (Ollama) integration for DeepSeek Harness. |
| dsh-lsp-actions | LSP diagnostics, formatting, completion, code actions and rename over language servers |
| dsh-mask | PII masking middleware: anonymize at the model boundary, restore at the display layer |
| dsh-memento | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool |
| dsh-observe | OpenTelemetry and Langfuse observability exporter for DeepSeek Harness. |
| dsh-output-styles | Claude Code outputStyles-equivalent runtime style switching |
| dsh-permission-rules | Claude Code-style declarative allow/deny/ask permission rules with audit |
| dsh-personal-directive | Personal directive injector with top-bar toggle (framework edition) |
| dsh-plugin-guide | Plugin-development knowledge base as an on-demand agent skill |
| dsh-reach | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console |
| dsh-research-report | Verifiable research-report engine: content-addressed evidence ledger and sealed versions |
| dsh-score | Multi-dimensional quality scoring for DeepSeek Harness plugins. |
| dsh-session-pin | Pin sessions in the Web sidebar with durable ordering |
| dsh-session-sync | Cross-device session sync for DeepSeek Harness — a dedicated git mirror of your session store. |
| dsh-skill-pack-security | Security-audit skill pack: secret scan, dependency and supply-chain review |
| dsh-talk | Voice-first session loop for DeepSeek Harness: talk to it, hear it answer. |
| dsh-test-drive | Isolated install-and-smoke test drives for DeepSeek Harness plugins. |
| dsh-ticktick | TickTick/Dida365 task bridge: session-header panel + 11 tools |
| dsh-translate | Vendor parameter translation and deterministic JSON repair for DeepSeek Harness. |
| dsh-wechat | WeChat ↔ DSH bridge (Tencent iLink bot): text/image/file/voice, approvals in chat |
Install from the DSH Desktop Market
All PerryLink plugins are browsable in the built-in DSH Desktop Market: Market → Sources → add source → paste https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → select it. Installation still goes through the Market's npm-identity verification and your confirmation.
License
Apache License 2.0 © 2026 dsh-mcp-panel contributors
Operate deliberately
Install and manage
Prerequisites and target Profile
Target: Web Profile
Delivery: Dsh Bundle Git — PerryLink/dsh-mcp-panel#8bee136c3135f2f77bff36567bd1d47e01ac2827。
Verify, update, and remove
Show lifecycle commands
dsh plugin --profile web listCompatibility and access
Declared DeepSeek Harness web plugin compatibility: >=0.1.2-rc.1 <0.2.0, including declared 0.1.2-rc.1 and 0.1.5-alpha.1。
Review compatibility evidence ↗
Risk facts
Declares outbound network access for MCP connectivity probes and server interactions.
Evidence ↗Can append approval-gated MCP configuration patches and retain backups when profile writes are enabled.
Evidence ↗Evidence and editorial reviewManifest, Bundle patch, distribution and freshness
Immutable evidence
Review status and source activity
Use the pinned source for review. Treat generated profile patches and trial tool calls as actions requiring your normal approval and endpoint review.
AI reviewed Sep 9, 2026, 2:22 PM UTC。GitHub facts last checked Sep 9, 2026, 2:22 PM UTC。
No material source change has been recorded since this evidence baseline.