Back to home

drfccv

dsh-mcp-center

Connect any MCP server to your DeepSeek Harness — point, click, done.

Stars
1
Language
TypeScript
Created
Aug 14, 2026
Updated
Aug 14, 2026

Introduction

MCP Center

English | 中文

Connect any MCP server to your DeepSeek Harness — point, click, done. MCP Center is a settings-driven MCP server manager. Register servers (Streamable HTTP or local stdio processes) on the dedicated Settings → MCP Center page; save and they connect immediately, their tools becoming first-class, model-callable tools in every session.

MCP Center settings page

Why use it

  • No code, no config files — everything happens in the Settings UI.
  • Both MCP server types supported:
    • Streamable HTTP — remote MCP endpoints, with optional auth (none / static Bearer token / custom headers).
    • stdio — local processes (npx, uvx, python, …).
  • Tools are instantly usable — each connected server's tools appear as mcp__<name>__<tool> and can be called by the model in all sessions.
  • Zero-dependency install — the client transport is implemented in the plugin itself (no external MCP SDK), so the plugin adds no peer-dependency chain to your profile.
  • Per-server on/off — disable a server to unregister its tools and drop the connection; the config is kept.

Requirements

  • DeepSeek Harness with the web profile
  • Node.js ^22.19 or >=24

Quick start

1. Install the plugin

The package is published on npm as dsh-mcp-center:

# install from the npm registry
dsh plugin --profile web add dsh-mcp-center

Prefer installing from source? See Development.

2. Restart and open the settings page

Restart dsh web, open Settings → MCP Center, and click + Add MCP server:

  • Streamable HTTP: name (the mcp__<name>__* prefix), URL, and auth mode (none / Bearer token / custom headers).
  • stdio: name, command (e.g. npx), args (space-separated; quote args containing spaces), optional env (JSON object) and working directory.

3. Save — and it's connected

The server connects as soon as you save. Status badges show Connected (N tools) / Connecting / Error / Disabled. Per server you can enable/disable, delete, and (for Bearer servers) re-token.

The model can use it right away

Tools from connected servers are first-class to the model. For a server named web:

mcp__web__ping    mcp__web__shout

Tool results are rendered as native text; isError results surface through the registry's error path.

The plugin depends only on @deepseek-ai/cordis (peer) and React (client half). No MCP SDK, no settings-service coupling, no fallback-tree resolution of MCP peer packages.

Configuration storage

Server configs live in ~/.dsh/mcp-center.json:

{
  "servers": [
    { "id": "…", "name": "web", "type": "http", "url": "http://localhost:3000/mcp", "authMode": "none" },
    { "id": "…", "name": "fs", "type": "stdio", "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"] }
  ]
}

⚠️ Bearer tokens are stored here in plain text — treat this file as a secret.

How it works

PieceMechanism
Settings pagesettings.section slot entry (MCP Center tab)
APISame-origin JSON under /mcp-center/api/* (ping, servers CRUD, connect, enabled)
HTTP transportStreamable HTTP: JSON-RPC over POST, Mcp-Session-Id, JSON or SSE responses
stdio transportchild_process.spawn a local command, JSON-RPC over stdin/stdout (newline-delimited); reconnect reaps the old process first
Tool schemaServer JSON Schemas sanitized to the registry's supported raw subset (unsupported vocabulary degrades to unconstrained)
State~/.dsh/mcp-center.json

Current limitations

  • Only tools are bridged; resources and prompts MCP capabilities are not.
  • Bearer tokens live in a plain JSON file under ~/.dsh — treat it as a secret.
  • stdio servers run as long-lived child processes tied to the plugin lifecycle; args are whitespace-tokenized (quotes protect args with spaces) with no shell expansion — write absolute paths or env vars yourself for ~, $VAR, pipes, etc.
  • No automatic reconnect after a crash in this version; re-enable or restart the server to reconnect.

Development

pnpm install
pnpm build      # tsdown: lib/index.js (node) + lib/client.js (browser)
pnpm typecheck