Preface¶
DeepSeek Harness (dsh) is an open-source agent runtime developed by DeepSeek, which the official repository summarizes in one sentence: Everything is a plugin. Model adapters, tools, sessions, sandboxes, and web interfaces can all be added or removed at the configuration layer without modifying the core source code. The project is currently in developer preview, and its interfaces will continue to change. Independent plugin directory sites have emerged in the community, aggregating and displaying GitHub repositories tagged with the dsh-plugin topic. Please note that these directories are not officially affiliated with DeepSeek / Fangjia and should not be treated as an official app store.
Connecting external capabilities to MCP (Model Context Protocol) is a very common extension method in DSH. Many remote MCPs use Streamable HTTP, and their entry points are protected by OAuth: the first connection requires opening a browser for login, and subsequent sessions are maintained using tokens. The built-in @deepseek-ai/dsh-mcp-client can complete tool discovery, naming, invocation, and reconnection, but the repository’s README clearly states that this native connection process lacks PKCE, dynamic client registration, browser authorization, and token persistence.
dsh-oauth-mcp-client is the plugin that fills this gap. It implements the OAuth 2.1 authorization code flow on top of the native client. By default, it connects to the Springbrand production MCP Gateway, and you can also add other services that support both OAuth and Streamable HTTP via the web interface. This article is organized after cross-checking with the community directory details page, the GitHub repository README (both Chinese and English), package.json, springbrand.cordis.yml, the source code, and the official deepseek-ai/deepseek-harness repository.
What is this¶
dsh-oauth-mcp-client is a development and runtime plugin for DeepSeek Harness, maintained by the GitHub organization springbrand-lab. The README indicates that the publisher is SpringBrand, which positions itself as an AI-assisted service marketplace for commercial services. The license is MIT, and the primary language is TypeScript. The package name in package.json is @dsh-external/dsh-oauth-mcp-client, with version 0.1.0. The community directory categorizes it under “Development and Runtime”. The repository was created on 2026-08-13, with the latest push on 2026-08-14; as of 2026-08-18, GitHub shows 8 stars, while the directory page shows 6 stars—star counts are dynamic, so refer to the repository page for the latest number.
It solves a specific problem: performing a browser login for an OAuth-protected Streamable HTTP MCP server, storing the token in DSH’s credential service, and registering the remote tools into the current Harness instance. src/connection.ts and src/tools.ts are modified based on the official @deepseek-ai/dsh-mcp-client under the MIT license, and the tool discovery, naming, execution, and reconnection behaviors are kept consistent with the built-in client as much as possible.
The default configuration included with the repository connects to the Springbrand production MCP Gateway (https://connector.springbrand.ai/mcp). This is not a universal MCP manager: it does not handle local stdio processes, nor does it provide static Bearer token mode. The server must support both OAuth and MCP Streamable HTTP.
Core Features¶
The capabilities listed in the repository’s README can be divided into several sections, and only the parts that have been cross-checked are described below.
-
OAuth 2.1 Authorization Code + PKCE. The first connection will open the system’s default browser to complete login and consent. The callback listener is bound to the local loopback (
127.0.0.1) with the path/oauth/callback; whencallbackPortis0, the operating system will select an available port. The source code usesxdg-open/open/rundll32to launch the browser, and the authorization timeout defaults to 300000 milliseconds (5 minutes). -
Dynamic Client Registration. The OAuth client metadata is generated by the plugin, with
token_endpoint_auth_methodset tonone, and the authorization types includeauthorization_codeandrefresh_token. Client information and tokens are written to DSH’s credential service and are not stored in the plugin repository. -
Streamable HTTP and Automatic Reconnection. The transport layer is MCP Streamable HTTP. If the connection is lost, it will retry with exponential backoff, which is enabled by default. The default timeout for a single tool call is 60000 milliseconds.
failOnStartupErrordefaults totrue: if the first authorization, connection, or tool synchronization fails, the plugin activation will fail directly. -
MCP Tool Discovery, Registration, and Invocation. Remote tools are registered in accordance with DSH conventions as
mcp__<serverName>__*. The default connected namespace isspringbrand, and the two tools used for self-checking in the README are:
-mcp__springbrand__search_capabilities
-mcp__springbrand__execute_capability -
Web Interface for Connection Management.
package.jsondeclaresdsh.client.platformasweband injects client plugins related to the settings page. Open Settings → Plugins → MCP Connections to view real-time status and registered capabilities. The “Add and Login” button on the page will permanently write the connection to~/.dsh/profiles/web/cordis.patch.yml, and it will still persist after restarting, without needing temporary--patchflags. -
Default Springbrand Connection. The bundle patch file
springbrand.cordis.ymlwill attach both the web management page and a connection namedspringbrand-mcp-oauth. When this bundle is added to a profile, the default MCP connection will also be added automatically, without the need for separate MCP registration.
Refer to the README and springbrand.cordis.yml for configuration fields:
| Field | Description | Default Value |
|---|---|---|
serverName |
Tool namespace registered to DSH | springbrand |
url |
HTTPS Streamable HTTP MCP address | https://connector.springbrand.ai/mcp |
credentialRef |
DSH credential reference name | SPRINGBRAND_MCP_OAUTH_PRODUCTION |
scope |
Optional OAuth scope | Discovered by the server |
callbackPort |
Local callback port; 0 means automatic selection |
0 |
authorizationTimeoutMs |
Browser authorization timeout | 300000 |
toolCallTimeoutMs |
Single MCP tool call timeout | 60000 |
failOnStartupError |
Terminate activation if first connection fails | true |
reconnect |
Exponential backoff reconnection policy | Enabled |
serverName must match ^[A-Za-z0-9_-]{1,32}$, and duplicates are not allowed within the same DSH process. The source code also requires: the URL must be HTTPS (HTTP is allowed for local loopback development), the address must not contain usernames or passwords, and the Authorization header must not be configured manually—this header is managed by the OAuth client.
Installation and Activation¶
The installation command provided on the community directory details page is:
dsh plugin add github:springbrand-lab/dsh-oauth-mcp-client
For reproducible installations, the directory page recommends pinning the commit hash:
dsh plugin add github:springbrand-lab/dsh-oauth-mcp-client#<commit>
The repository README is more conservative at the time of writing: this repository has not been published to npm, and it is recommended to first clone, build, and then install the local directory into the web profile.
git clone https://github.com/springbrand-lab/dsh-oauth-mcp-client.git
cd dsh-oauth-mcp-client
corepack enable
pnpm install
pnpm build
Then:
PLUGIN_DIR="$PWD"
npx --yes @deepseek-ai/dsh@latest plugin --profile web add "$PLUGIN_DIR"
npx --yes @deepseek-ai/dsh@latest web
Do not mix the two installation paths. The directory command is the original text from the community directory page; the README emphasizes that the current recommended method is to install via local checkout because the package is not yet available on npm. Always refer to the repository README before actual installation, and check if the MCP connections page appears in the web interface after installation.
The prerequisites verified against the README are as follows:
- Node.js 22.19 or higher
- Git
- A browser required for the first OAuth login
- Using the web profile (npx @deepseek-ai/dsh web)
The directory page has a fixed reminder: the plugin runs with the permissions of the current dsh process, and may execute code during installation. You should inspect the source code repository and license before installing.
The first startup will open a browser for Springbrand login and authorization. After successful authorization, open Settings → Plugins → MCP Connections to view real-time status and registered capabilities.
Typical Usage¶
After installing the default connection and completing authorization, you can directly ask the Agent to search the Springbrand capability directory. The example given in the README is:
Search for resources in the Springbrand marketplace and list the top 10.
The normal invocation flow is: first call search_capabilities, then pass the full returned name to execute_capability. The full name given in the README example is platform:springbrand@0:springbrand.resources.list, do not use the shorter action_id (such as springbrand.resources.list). The plugin will write this tool selection rule into the Agent’s system prompt, and users can submit requests in natural language without manually specifying the tool name.
If you need to connect to other OAuth MCP services, open Settings → Plugins → MCP Connections, fill in a unique service name and HTTPS MCP address, click Add and Login, and complete OAuth in the automatically opened browser. The page will then display real-time status and the actual registered tools. Clicking Remove will uninstall the corresponding tools and delete or deactivate the connection in the permanent profile.
The web page is the default configuration method. If you need to manually edit the configuration, add the connection to the same file ~/.dsh/profiles/web/cordis.patch.yml:
- insert:
- id: my-oauth-mcp
name: '@dsh-external/dsh-oauth-mcp-client'
config:
serverName: my-mcp
url: https://mcp.example.com/mcp
credentialRef: MY_MCP_OAUTH
failOnStartupError: true
serverName will become part of the tool name, for example mcp__my-mcp__search. The peer service must support OAuth and MCP Streamable HTTP; the first connection will also open a browser for authorization.
For load-level self-checks, the README also provides a headless method: install the current checkout into the headless profile and start a chat session, then complete OAuth when prompted:
PLUGIN_DIR="$PWD"
npx --yes @deepseek-ai/dsh@latest plugin --profile headless add "$PLUGIN_DIR"
npx --yes @deepseek-ai/dsh@latest --profile headless "hi"
Applicable Scenarios and Notes¶
This plugin is suitable for users who are already using dsh web and need to connect OAuth-protected remote Streamable HTTP MCPs into the agent loop. Good matches include: using the capabilities in the default Springbrand marketplace; or having your own MCP gateway that uses OAuth 2.1 + Streamable HTTP, and hoping to complete a one-time browser login and have the DSH credential service manage the tokens afterward.
There are several boundary cases to review before use.
This plugin supplements an OAuth client, not a universal MCP management panel. It does not launch local stdio processes, nor does it provide static authentication like “just fill in the Bearer token from the environment variable”. If the peer service does not support OAuth or does not use Streamable HTTP, this connection path will not work.
OAuth status is saved by DSH’s credential service, and the callback only listens on the local loopback. Do not write the Authorization header in the configuration, and do not commit access tokens, refresh tokens, or exported credential data into the repository. URLs must use HTTPS, except for local loopback development.
failOnStartupError defaults to true. If the first authorization fails, the browser times out, or tool synchronization fails, the plugin will refuse to activate instead of continuing to run with a partially functional connection. The default authorization timeout is five minutes, and an interactive local browser is required.
The plugin runs with the permissions of the current dsh process. Before installing community plugins, you should inspect the source code and license; when a reproducible environment is needed, pin the installation command to a specific commit. The community directory is an independent site, and the installation command should be based on the directory page and repository source text, do not construct the command based on the plugin name alone. DeepSeek Harness is still in developer preview, and core plugins and APIs will change. If the interface text does not match after installation, refer to the current repository README.
Summary¶
dsh-oauth-mcp-client supplements the OAuth 2.1 capabilities on top of the DeepSeek Harness native MCP client: authorization code + PKCE, dynamic client registration, browser login, local callback, token persistence, and disconnection reconnection. After being installed into the web profile, it connects to the Springbrand production MCP Gateway by default, and you can also add other services that support both OAuth and Streamable HTTP via Settings → Plugins → MCP Connections. It is a community MIT-licensed project that has not been published to npm as of now; inspect the repository before installation, and manage tokens via DSH’s credential service, do not write them into configuration files.
Community Directory: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-oauth-mcp-client/
GitHub: https://github.com/springbrand-lab/dsh-oauth-mcp-client