DeepSeek Harness plugin

dsh-mcp-orchestrator

MCP orchestration layer for DeepSeek Harness — multi-server routing, health monitoring, fallback, and tool aggregation

Jump to install

Source facts

Repository
Daseanle/dsh-mcp-orchestrator
Latest update
Aug 19, 2026
Category
Tools & Capabilities
GitHub stars
0
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/Daseanle/dsh-mcp-orchestrator
Plugin: dsh-mcp-orchestrator
Author: Daseanle

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer3 files
README.mdSource · read only

dsh-mcp-orchestrator

MCP orchestration layer for DeepSeek Harness (DSH) — multi-server management, health monitoring, auto-restart, tool aggregation with collision handling, fallback routing, and usage statistics.

What It Does

DSH has built-in MCP client support, but it lacks orchestration: there's no health monitoring, no auto-restart on crash, no tool collision detection, no fallback routing, and no unified tool discovery. This plugin fills that gap.

Key capabilities:

  • Connect to multiple stdio MCP servers simultaneously
  • Health monitoring via periodic ping checks
  • Auto-restart with exponential backoff on unexpected disconnection
  • Tool aggregation across all servers with collision detection
  • Three namespace modes for tool name conflicts (collision, server, dot)
  • Fallback routing: when a tool call fails on one server, auto-retry on others providing the same tool
  • Priority-weighted sorting: servers sorted by success rate then priority
  • Usage statistics: per-server, per-tool, and overall call tracking with response times
  • Four DSH management tools for the agent to discover, call, and monitor MCP tools

Status: v0.2.0 — Orchestration

Verified Capabilities

CapabilityStatusTest
MCP SDK Client API (connect, ping, listTools, callTool, close)Passtest/spike.mjs
Multi-client support (2+ servers)Passtest/spike.mjs
Error handling (non-existent tool, missing args)Passtest/spike.mjs
ServerManager connect/disconnect/restartPasstest/integration.mjs
Tool discovery and callingPasstest/integration.mjs
Auto-restart with exponential backoffPasstest/integration.mjs
Tool collision detectionPasstest/integration.mjs
Namespace modes (collision/server/dot)Passtest/integration.mjs
Health monitoring (ping-based)Passtest/integration.mjs
Zod config schema validation (incl. Phase 3 fields)Passtest/integration.mjs
Plugin lifecycle (apply, tools, system prompt, cleanup)Passtest/integration.mjs
Multi-server plugin with collision handlingPasstest/integration.mjs
Fallback routing on server failurePasstest/integration.mjs
Priority-weighted candidate sortingPasstest/integration.mjs
Success-rate-based server orderingPasstest/integration.mjs
UsageTracker (record, stats, getRecent, clear)Passtest/integration.mjs
mcp_stats tool (summary/server/tool/all detail modes)Passtest/integration.mjs
Fallback disabled mode (direct routing path)Passtest/integration.mjs

Test Results

Spike:         34 passed, 0 failed
Integration:  236 passed, 0 failed
Total:        270 passed, 0 failed

Architecture

DSH Agent (Node.js process)
  └─ Cordis Framework
       └─ dsh-mcp-orchestrator plugin (apply(ctx, config))
            ├─ Config Schema (zod: servers[], healthCheckInterval, namespaceMode,
            │    enableFallback, maxFallbackAttempts, preferHealthyServers, enableStats)
            ├─ System Prompt: "mcp-orchestrator" (management tools + workflow guide)
            ├─ Tool: mcp_list_servers (status, health, tool count per server)
            ├─ Tool: mcp_list_tools (aggregated tools, collision info, namespaced names)
            ├─ Tool: mcp_call_tool (auto-resolve, fallback routing, metadata in results)
            ├─ Tool: mcp_stats (usage statistics: summary/server/tool/all)
            ├─ ServerManager
            │    ├─ Multi-server stdio connections (StdioClientTransport)
            │    ├─ Auto-restart (exponential backoff, max restarts)
            │    ├─ Tool sync (listTools on connect/reconnect)
            │    ├─ Health ping
            │    └─ findServerForTool (priority-based resolution)
            ├─ ToolRegistry
            │    ├─ Tool aggregation across all servers
            │    ├─ Collision detection (same tool name on multiple servers)
            │    └─ Namespace modes: collision / server / dot
            ├─ HealthMonitor
            │    └─ Periodic ping checks (configurable interval)
            ├─ UsageTracker
            │    ├─ Records every call (success/failure, response time, fallback)
            │    ├─ Per-server, per-tool, overall statistics
            │    └─ Recent call log (configurable max records)
            ├─ FallbackRouter
            │    ├─ Resolves tool → finds all servers providing it
            │    ├─ Sorts candidates by success rate (if enabled) then priority
            │    ├─ preferredServer override (try specific server first)
            │    └─ Sequential fallback with max attempts limit
            └─ ctx.effect() cleanup (stop monitor, close all servers, clear tracker)

Installation

Prerequisites

  • Node.js >= 22.19 (or >= 24)
  • DSH installed: npm install -g @deepseek-ai/dsh
  • At least one MCP server to connect to

Build

cd dsh-mcp-orchestrator
npm install
npm run build

Install into DSH

Option A: From GitHub (recommended)

dsh plugin --profile web add github:Daseanle/dsh-mcp-orchestrator
dsh web

Option B: From local clone

git clone https://github.com/Daseanle/dsh-mcp-orchestrator.git
cd dsh-mcp-orchestrator && npm install && npm run build
dsh plugin --profile web add file:./dsh-mcp-orchestrator
dsh web

Configuration

Create or edit cordis.patch.yml in your DSH config directory:

- id: dsh-mcp-orchestrator
  config:
    servers:
      - name: filesystem
        command: npx
        args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
        autoRestart: true
        priority: 10

      - name: memory
        command: npx
        args: ["-y", "@modelcontextprotocol/server-memory"]
        autoRestart: true
        priority: 5

    healthCheckInterval: 30000
    namespaceMode: collision

Config Schema (zod)

FieldTypeDefaultDescription
serversarray[]MCP server configurations
servers[].namestringUnique server name
servers[].commandstringExecutable to run
servers[].argsstring[][]Command line arguments
servers[].envRecord<string, string>{}Environment variables
servers[].autoRestartbooleantrueAuto-restart on crash
servers[].restartDelaynumber2000Base restart delay (ms)
servers[].maxRestartsnumber3Max restart attempts
servers[].prioritynumber0Priority for tool resolution (higher = preferred)
healthCheckIntervalnumber30000Ping interval (ms)
namespaceModeenumcollisionTool name collision handling
enableFallbackbooleantrueEnable fallback routing on tool call failure
maxFallbackAttemptsnumber3Max servers to try before giving up
preferHealthyServersbooleantrueSort candidates by success rate (false = priority only)
enableStatsbooleantrueRegister mcp_stats tool and track usage

Namespace Modes

ModeBehaviorExample
collisionNamespace only when same tool name exists on 2+ serversechoserver1__echo (if collision)
serverAlways namespace with serverName__toolNameechoserver1__echo
dotAlways namespace with serverName.toolNameechoserver1.echo

Project Structure

dsh-mcp-orchestrator/
├── src/
│   ├── index.ts              # Plugin entry: apply(ctx, config) with zod schema
│   ├── server-manager.ts     # MCP server connections, auto-restart, tool sync
│   ├── tool-registry.ts      # Tool aggregation, collision detection, namespacing
│   ├── health-monitor.ts     # Periodic ping-based health checks
│   ├── usage-tracker.ts      # Tool call statistics (per-server, per-tool, overall)
│   ├── fallback-router.ts    # Fallback routing with priority and success-rate sorting
│   └── tools/
│       ├── list-servers.ts   # mcp_list_servers tool
│       ├── list-tools.ts     # mcp_list_tools tool
│       ├── call-tool.ts      # mcp_call_tool tool (with fallback routing)
│       └── stats.ts          # mcp_stats tool (usage statistics)
├── dist/                      # Compiled JavaScript (tsc output)
├── test/
│   ├── mock-server.mjs       # Mock MCP server (echo, add, greet)
│   ├── mock-server-2.mjs     # Second mock server (echo, subtract) for collision tests
│   ├── spike.mjs             # Spike: MCP SDK API validation (34 tests)
│   └── integration.mjs       # Integration: full plugin tests (236 tests)
├── cordis.patch.yml          # Example plugin configuration
├── package.json
├── tsconfig.json
├── CHANGELOG.md
└── LICENSE

Roadmap

PhaseScopeStatus
Phase 1 — SpikeMCP SDK validation, connect/listTools/callTool, multi-clientComplete
Phase 2 — MVPServerManager, ToolRegistry, HealthMonitor, auto-restart, 3 DSH toolsComplete
Phase 3 — OrchestrationFallback routing, usage statistics, priority weighting, mcp_stats toolComplete

License

MIT