Introduction

In DeepSeek Harness (DSH), connecting to an MCP server, the built-in @deepseek-ai/dsh-mcp-client only supports static headers in configuration, without OAuth, and does not support local stdio processes. When remote services require OAuth login or local tools need to start sub-processes via npx / uvx, you must modify the configuration yourself or find workarounds.

dsh-mcp-manager is a DSH plugin maintained by community contributor hyqhyq3, allowing centralized management of MCP servers in the Web UI’s Settings → MCP page. It supports browser OAuth or static Bearer tokens for HTTP remote services, stdio for local services, and registers tools with mcp__<name>__* naming into DSH’s tool table. Below, we introduce its purpose, capabilities, and usage.

What This Is

dsh-mcp-manager (GitHub: hyqhyq3/dsh-mcp-manager, current version 0.6.0, MIT license) is an MCP server management plugin for the DSH web profile. It automatically injects via cordis.patch.yml, eliminating the need for manual modification.

Classified under admin-security: OAuth credentials and server configurations are stored in local state files, while static tokens are referenced only by environment variable names, not stored as plaintext on disk.

Core Features

OAuth and Static Token Authentication

HTTP-type servers support two authentication methods:

  1. OAuth (Authorization Code + PKCE): Supports RFC 7591 dynamic client registration, refresh_token rotation, and automatic reconnection after restart. Click Authenticate in the UI; tools are registered immediately after browser authorization. The callback address is http://127.0.0.1:<port>/mcp-manager/callback/<id>, and OAuth providers must allow loopback redirects; the origin is derived from the host/port currently used to access the DSH GUI in the browser.
  2. Static Bearer Token: Configuration specifies the environment variable name holding the token (Codex-style tokenEnv), with the token itself not written to the configuration file.

Additionally, custom HTTP headers are supported: headers for direct values, headerEnv for environment variable references, corresponding to Codex’s http_headers / env_http_headers.

stdio Local Processes

stdio-type can directly execute commands like npx, uvx, python, etc. The plugin communicates via JSON-RPC over the subprocess stdin/stdout; it reconnects and cleans up after process exit. On Windows 10/11, it launches via cmd.exe to correctly resolve shims like npx.cmd.

In-Place Editing and Workspace Isolation

Servers can be renamed in the UI, switched between stdio and HTTP, or have their authentication or headers modified without deletion and recreation.

Global servers are visible in any workspace; workspace-level servers are written to <workspace>/.dsh/dshmm/mcp.json, and their tools are only registered to that workspace’s session. Workspace configurations can use exclude to屏蔽 specific global servers. Example:

{
  "mcpServers": {
    "filesystem": { "type": "stdio", "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "."] },
    "unity-mcp": { "type": "http", "url": "http://localhost:8090/", "authMode": "static", "tokenEnv": "UNITY_MCP_TOKEN" }
  },
  "exclude": ["github"]
}

Manual edits to this file trigger hot reloading; invalid JSON displays an error while the last valid configuration remains active.

Tool Registration and On-Demand Proxy

When “On-demand MCP tool calls” is disabled by default, tools from each connected server are exposed as first-class tools with naming consistent with the built-in client. For a server named odin:

mcp__odin__search_tools     mcp__odin__describe_tool
mcp__odin__execute_tool     mcp__odin__list_tool_scopes

When on-demand mode is enabled, the model side sees only three proxy tools: mcp_search_tools, mcp_describe_tool, mcp_execute_tool. The original mcp__* names do not appear in requests, and direct calls are rejected. mcp_search_tools returns up to 10 matched tools by default (hard limit 20), scored by server name, tool name, and description.

When notifications/tools/list_changed triggers, stdio and Streamable HTTP servers perform incremental refreshes only for added, removed, or schema-changed tools.

State is persisted at ~/.dsh/mcp-manager.json (server configurations, OAuth client registrations, and tokens; static tokens only store environment variable names).

Installation and Enabling

Environment requirements:

  • DSH web profile (npx @deepseek-ai/dsh web)
  • Node.js ^22.19 or >=24, with pnpm in PATH

Official installation command:

npx -p @deepseek-ai/dsh dsh plugin --profile web add github:hyqhyq3/dsh-mcp-manager

After installation, restart dsh --profile web and refresh the page. The package declares dsh.bundle.patch, and the plugin activates automatically.

Typical Usage

  1. Open the DSH Web UI’s Settings → MCP.
  2. Click + Add MCP server (subsequently editable via Edit):
    - Scope: user for global; workspace binds to a single workspace, writing configuration to that workspace’s .dsh/dshmm/mcp.json.
    - HTTP: Fill in name (becomes mcp__<name>__* prefix), URL, authentication mode (OAuth or static token), optional headers.
    - stdio: Fill in name, command, arguments (one per line), environment variables, optional working directory.
  3. OAuth server: Click Authenticate → browser login → callback registers tools immediately.
  4. Static token server: Fill in the environment variable name (e.g., MCP_BEARER_TOKEN), save, and stdio will start and connect immediately.
  5. Optional: Enable On-demand MCP tool calls at the top of the page; this setting is persisted per profile, and existing sessions take effect on the next request.

Status badges include connected (N tools), needs-auth, authorizing, error, disabled. Each server can be authenticated, edited, enabled/disabled, or deleted. Disable deregisters tools and disconnects; configurations and OAuth tokens are retained. Enable reconnects without re-authentication. Disabled state persists across restarts.

Use Cases and Notes

Suitable for unified management of multiple MCP sources in a DSH Web environment: remote HTTP services requiring OAuth, APIs needing only Bearer tokens, and local stdio toolchains. Workspace isolation fits combinations like “global GitHub MCP + project-specific filesystem MCP”.

Before use, note:

  • The plugin runs stdio sub-processes with the current dsh process privileges and reads/writes ~/.dsh/mcp-manager.json; review the GitHub source code and MIT license to ensure compliance with your security policies.
  • OAuth providers must support loopback redirects; static tokens require prior export of corresponding environment variables.
  • On-demand proxy is disabled by default; if you have many tools and wish to reduce schema size in Native mode, enable it at the top of Settings → MCP.

SkillHub directory (a community site with no official affiliation with DeepSeek / High-Flyer) currently shows this plugin with about 11 stars, 2 forks, categorized as admin-security.

Links

  • Directory page: https://www.skillhub.cn/plugins/hyqhyq3/dsh-mcp-manager
  • GitHub: https://github.com/hyqhyq3/dsh-mcp-manager

Following these steps, DSH users can add, authenticate, isolate workspaces, and expose tools for MCP within a single Settings page, addressing the gaps in the built-in MCP client regarding OAuth and stdio.