npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

dsh-mcp-panel

v0.6.24

Published

MCP management console for the official DeepSeek Harness MCP client: /mcp command with health diagnostics and pipeline trial calls, a Settings MCP tab with server CRUD (append-only profile-patch fragments, approval-gated writes with automatic backups), a

Downloads

10,657

Readme

dsh-mcp-panel

  • 1024 store channel: npm i -g dsh1024 once, then dsh1024 plugin --profile web add dsh-mcp-panel (counts toward the deepseek1024.com install ranking). Gitee dshfind OpenSSF Scorecard

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.

License DSH plugin dsh-doctor DSH Market Node CI Version npm version npm downloads

English · 简体中文 · Español · Português · हिन्दी


📖 Ecosystem knowledge base — measured data, not marketing: plugin development guide · plugin-selection data · maintenance criteria.

⭐ 如果它帮到了你

这个插件是 DSH 插件家族的一员(40+ 个,全部 Apache-2.0)。如果你在用,给个 star —— 它不会解锁任何功能,但会让下一个人在搜索里更容易找到它。

English: part of a 40+ plugin family for DeepSeek Harness. If it is useful, a star helps the next person find it — nothing is gated behind it.

What is dsh-mcp-panel?

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.

Terminal demo of dsh-mcp-panel: dsh-mcp-panel — install, then /mcp status per server

Animated terminal demo of dsh-mcp-panel

The same run, animated.

Compatibility

| Surface | Status | |---|---| | Harness | DeepSeek Harness dsh-v0.2.1-alpha.1 (verified 2026-09-25): dual typecheck rulers green on the 0.1.6-alpha.2 dev/test face (this repo is the family's canary — no new errors surfaced), 174 tests, and the full gate chain (typecheck / typecheck:ci / test / build / verify / package). The writePatch re-verification assertion stands on this line. Previous baseline: dsh-v0.1.7-alpha.1 (verified 2026-09-16). | | 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.

  • /mcp command — one row per server: transport, target, tool count, connection status (from the upstream seam; unknown when unobserved), last error, reconnect count — model-readable, session-log reconstructable, five output languages.
  • /mcp <server> tools — model-visible mcp__* 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> disable / enable — turn one server row off or back on without editing the profile patch by hand.
  • /mcp <server> probe — one Streamable HTTP connectivity probe for that server (background job).
  • /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 for add and id-targeted overrides (- id: + name: + disabled:/config:) for edit/remove → clipboard copy or approval-gated write with automatic backups and loader re-verification.
  • Resources browse — read-only resource listing, template listing, and URI reads through the official list_mcp_resources / list_mcp_resource_templates / read_mcp_resource tools (bridged by the shipped @deepseek-ai/dsh-mcp-resources service); results are shown in the tab only, never in model context.
  • Recommended directory — a built-in community MCP server catalog (filesystem, git, github, fetch, playwright, …) served in the snapshot; catalogEntries appends/overrides entries, and catalogToConfigInput turns one into a one-click add.
  • Config import/export — exportConfigs() serializes the server rows to a versioned JSON document (a !!js row exports as null with a reason), and importPreview() parses an export back into per-server add patch fragments for review.
  • Tool trial console — server → mcp__* tool → JSON args → canonical JSON result + rendered content; capped by trialMaxResultChars; 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 | - id: + disabled: true override (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

dsh plugin --profile web add github:PerryLink/dsh-mcp-panel
# 1. install the bundle into your profile
dsh plugin --profile web add github:PerryLink/dsh-mcp-panel

# 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 — the prepare script builds with production dependencies only.
  • npm channel (published releases): dsh plugin --profile web add dsh-mcp-panel.
  • tarball channel: pnpm pack in this repo, then dsh plugin --profile web add ./dsh-mcp-panel-<version>.tgz.
  • uninstall: remove the mcp-panel row from cordis.patch.yml (the web surface hot-reloads it), delete the package from the profile's node_modules, and verify with dsh web --dump-config that no mcp-panel row remains.

Configuration

All tunables are Schemastery Config fields (changeable from cordis.yml). cordis.patch.yml documents the common keys inline; the full key list lives in the table below.

| 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) | | writeVerifyEnabled | true | Re-verify each write against the loader's re-applied state before reporting success | | writeVerifyTimeoutMs | 3000 | Polling budget for write verification in ms | | 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> disable / enable | command | Toggle one server row in the profile patch | | /mcp <server> probe | command | One Streamable HTTP connectivity probe (background job) | | /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

Resources ARE bridged upstream: the base bundle mounts @deepseek-ai/dsh-mcp-resources, the official client registers each connection's resource provider into ctx.mcpResources, and that package owns the three shared tools (list_mcp_resources, list_mcp_resource_templates, read_mcp_resource). The console feature-detects the service and the registered tools, and offers a read-only Resources browser (list / templates / URI read) on every server card — each call runs through the OFFICIAL tool pipeline, and results never enter model context.

MCP prompt templates and resource subscriptions remain deferred upstream; the capabilities board marks Prompts pending upstream support.

Permissions & data

  • Permissions: the dshWorkshop manifest declares network:outbound and native-code:none.
  • Data: the panel is read-only; it writes only append-only cordis.patch.yml fragments (approval-gated, backup-first). URL query credentials, userinfo passwords, header values, bearer tokens, and JWTs are redacted before rendering; configured headers never 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 / — with statusSource: '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, keeps the newest backupCount backups, and re-verifies every write against the loader's re-applied state before reporting success (a skipped patch never reads as success).
  • No prompt injection. The panel registers no prompt sections; its only model-facing text is the two tool/command descriptions.

Known limitations

  • Prompt templates & resource subscriptions are pending upstream support — the official client bridges tools and resources, but not prompts or subscriptions.
  • 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 / —.
  • Writes are verified, not guaranteed — the console re-verifies each write against the loader's re-applied state and fails honestly when the loader did not apply it (e.g. a row inserted by $DSH_HOME/cordis.patch.yml, which a profile-layer patch cannot reach).

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 33 actively maintained DeepSeek Harness plugins from PerryLink — the roster is 42, of which 6 are frozen and 3 retired; every one keeps its row below, with the reason in the Status column. If this one helps you, the others likely will too:

| Plugin | One-liner | Status | |---|---|---| | dsh-auto-review | Second-model auto-review on the approval chain, fail-closed by default | | | dsh-autotier | Automatic strong/cheap model-tier routing with deterministic risk guards and a /tier command | | | dsh-background-agents | Durable background child agents with a Web UI sidebar, messaging and interrupt | 🚫 RETIRED — see the note above | | dsh-budget | Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel. | 🧊 FROZEN — see the repo README | | dsh-catalog | DSH Desktop Market standard catalog source for the PerryLink family | | | dsh-cert-mcp | Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence | | | 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 | 🧊 FROZEN — see the repo README | | 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. | 🧊 FROZEN — see the repo README | | dsh-doublecheck | Engineering-discipline guard: requirements grill, test gates, adversary review | | | dsh-draw | Unified static-image generation routing for DeepSeek Harness. | 🧊 FROZEN — see the repo README | | 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-laya | Laya typed decisions (noul/choice/score) as a first-class Cordis service and model-visible tools | | | 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-mcp-panel | Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors | | | dsh-memento | Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool | 🧊 FROZEN — see the repo README | | 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-plugin-certification | Community certification registry with repro-checkable grades and badges | | | dsh-plugin-doctor | Zero-dependency static + sandbox smoke detector for DSH plugins | | | dsh-plugin-guide | Plugin-development knowledge base as an on-demand agent skill | | | dsh-plugin-kit | Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins | | | dsh-plugin-upgrade | One-package, one-corridor-index plugin upgrade skill: routes a repository to the matching closed corridor card | | | dsh-plugin-upgrade-015 | Merged 0.1.3-alpha.1 → 0.1.5-rc.1 upgrade corridor card plus a zero-dependency seam scanner | 🚫 RETIRED — corridors carried by dsh-plugin-upgrade | | dsh-reach | Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console | 🧊 FROZEN — see the repo README | | 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 | 🚫 RETIRED — see the note above | | 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-team-rooms | Cross-session team rooms: shared message bus, task board and timeline | 🚫 RETIRED — see the note above | | 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. | |

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