The core philosophy of DSH (DeepSeek Harness) is “everything is a plugin.” When developing locally or using the Web GUI (dsh web), managing MCP server connection status, enable/disable configuration, and local skills often requires editing configuration files directly. dsh-mcp-skill-control is a third-party plugin that provides a management panel in the Web GUI session header. It includes an MCP Servers tab and a Skills tab to replace manual configuration-file editing.

Positioning and Installation

This plugin provides a graphical management interface for MCP servers and local skills in the DSH Web GUI. It is a single-package, dual-side plugin (Host half + Browser half), distributed independently and requiring no modifications to DSH source code.

  1. Install the plugin
    Use the official CLI to install the plugin into the web profile:
    dsh plugin --profile web add https://github.com/shuaihaoV/dsh-mcp-skill-control
  1. Access the panel
    After installing and restarting the DSH process, click the “MCP” pill button in the Web GUI session header (left of Session log) to open the management panel.

  2. Uninstall
    To remove the plugin:

    dsh plugin --profile web remove @shuaihaov/dsh-mcp-skill-control

MCP Server Management

The plugin lists all configuration lines related to @deepseek-ai/dsh-mcp-client in the Web interface and provides status viewing and operations.

Status Viewing

The panel lists all MCP server lines, displaying serverName, transport method, endpoint, connection status, registered tool count, and inventory. The statuses are connected (active with registered tools), connecting (being established within 20 seconds), unreachable (determined by this plugin: active but no tools for 20 seconds, or automatically probed when streamable-http is unreachable), failed (the fiber enters a failed state), and disabled (deactivated).

Enable/Disable and Restart

  • Disabling / Enabling: Implemented by writing or removing a disabled override. Lines inserted by this plugin are rewritten in place; lines from other layers use top-level overrides.
  • Restart: Performs a stop-then-start operation for crash recovery or refreshing the tool list. This is a pure runtime operation and does not modify persisted state.

Add and Delete

  • Adding: Supported in two ways:
    1. Form entry (supports stdio / streamable-http; allows configuring env, headers, cwd, timeout, and reconnect).
    2. Paste JSON import (supports Claude Desktop / Cursor / OpenCode formats; automatically handles name slugging, SSE interception, and marking the source document as disabled).
  • Deleting: Removes the corresponding line from cordis.patch.yml. Note: Deletion is only available for lines inserted by this plugin’s patch layer; lines defined in the bundle layer can only be disabled, not deleted.

Diagnostic Probing

For streamable-http lines, if the plugin determines them to be unreachable, it automatically initiates an MCP initialize probe with a 30-second rate limit and translates states such as “zero tools” into readable diagnostic text.

Local Skill Control

Under the “Skills” tab, the plugin lists local skills under the user skill roots (~/.dsh/skills, ~/.agents/skills).

  • Enable/Disable Control: Supports one-click enabling/disabling of local skills. The operation is implemented by writing or removing disable-model-invocation in the frontmatter, while the Markdown body is preserved byte-for-byte.
  • File Management: Supports locating skill files in a file manager.

Architecture and Persistence

Configuration Writing

All changes are written to the profile’s cordis.patch.yml and applied via an HMR transaction by watchUserPatches. This means changes take effect immediately in the current process and persist after restart.

YAML Editing

Configuration writing uses YAML Document AST editing (the same approach as DSH’s own settings-file), ensuring that user comments, key order, and inline [...] formatting remain byte-for-byte consistent with the original after adding, removing, combining, and undoing changes.

Communication Channels

  • Primary channel: ctx.connection.rpc.call('/api', 'mcpManager/<method>').
  • Fallback channel: POST /mcp-manager/api/<method>. Used when RPC returns invocation-unavailable.

Notes

  1. Version Compatibility and Build:
    The plugin is currently aligned with DSH 0.1.7-alpha.2 (React 18). UI symbols are provided by dsh-client-ui-primitives and may be renamed across versions. After upgrading DSH, rebuild lib/; otherwise, the browser half may fail silently (the panel disappears while the API remains functional).

  2. How Changes Take Effect:

    • Browser half (UI): takes effect after refreshing the page.
    • Host half (service): takes effect after restarting the DSH process.
  3. Data Display:
    To avoid credential leakage, the panel does not display the specific values of env / headers.

  4. Status Updates:
    Status is delivered as polling snapshots rather than push updates. Polling runs every 5 seconds when the page is visible, speeds up to every 2 seconds when connecting lines exist, and pauses when the page is hidden.

  5. Development and Installation:
    When building with pnpm 11, the prepare hook for git-installed dependencies may be blocked by supply-chain protection. On first installation, run pnpm approve-builds --all in the profile directory. When developing from source, be aware of write-through risks between dev-link and global DSH, and follow the instructions in build.sh.

Conclusion

dsh-mcp-skill-control provides DSH users with an intuitive entry point for managing MCP servers and local skills, and ensures configuration integrity through YAML AST editing. For developers who frequently adjust MCP connections or manage local skills, this plugin can effectively reduce the workload of manually editing configuration files.