Back to home

YZz-S

dsh-dshx

MCP client hub (stdio / Streamable HTTP / SSE) with a web console for DeepSeek Harness — manage MCP servers, agent skills, slash commands, project & global memory, and prompt sections.

Stars
0
Language
JavaScript
Created
Aug 15, 2026
Updated
Aug 15, 2026

Introduction

dshx

English · 中文

An extension suite for the DeepSeek Harness (DSH) Web GUI: an MCP client hub (stdio / Streamable HTTP / SSE) with a web management console, plus skill, slash command, project & global memory, and prompt management. Plain ESM JavaScript, no build step.

English

Modules

ModuleSubpathWhat it does
MCP hubdshx/mcpConnects MCP servers over stdio, Streamable HTTP and SSE. Per-server state machine (connecting / connected / reconnecting / error), live logs (ring buffer + $DSH_HOME/dshext/logs/mcp-<id>.log), discovered-tool list, automatic reconnect with exponential backoff. Discovered tools are bridged to the model as native tools named mcp__<server>__<tool>. Model tools: mcp_status, mcp_restart.
Memorydshx/memoryGlobal memory ($DSH_HOME/dshext/memory/*.md) and project memory (<workspace>/.dsh/memory/*.md), injected into the system prompt before every model step. Model tools: memory_list, memory_read, memory_write, memory_delete. Project-scope writes follow the session sandbox policy (approval + sandbox_permissions escalation, same as the built-in write tool).
Skillsdshx/skillsCreates / edits / deletes skill bundles in the roots the harness skill registry already discovers ($DSH_HOME/skills, <workspace>/.dsh/skills); changes appear in the session skill catalog immediately. Model tools: skill_create, skill_edit, skill_delete.
Commandsdshx/commandsUser-defined slash commands as YAML files ($DSH_HOME/dshext/commands/*.yaml, <workspace>/.dsh/commands/*.yaml). Named commands are registered eagerly; a universal /cmd <name> [args] dispatcher resolves the calling session's project dir, so project commands work in every workspace. {{args}} is replaced with the typed input. Model tool: command_define.
Promptsdshx/promptsPrompt library ($DSH_HOME/dshext/prompts/*.md) registered as ordered system-prompt sections (dshx:prompts/<name>, configurable order / enable), a supplementary persona ($DSH_HOME/dshext/persona.md), and an assembled system-prompt inspector (rendered with a live agent scope so variables like {{model}} resolve).
Managerdshx/managerServes the web management console at http://127.0.0.1:3080/dshext/ (five tabs: MCP / Skills / Commands / Memory / Prompts, plus a JSON API under /dshext/api/*) and injects a floating "⚙ 扩展管理" button into the Web GUI.

Installation

Method 1 — install as a dsh bundle (persistent)

dsh plugin --profile web add github:YZz-S/dshx

Restart dsh web. The dsh.bundle entry in package.json applies cordis.patch.yml, which mounts the six rows above.

If you previously added the dshx rows manually to your profile's cordis.patch.yml (the local ./packages/dshx/... variant), remove those rows first — both share the row ids dshx-* and mounting them twice would register the tools and routes twice.

Method 2 — manual local install (no npm / GitHub)

  1. Copy lib/*.mjs to a directory inside your profile, e.g. $DSH_HOME/profiles/web/packages/dshx/lib/;
  2. Add the rows from cordis.patch.yml to $DSH_HOME/profiles/web/cordis.patch.yml, replacing name: dshx/<module> with name: ./packages/dshx/lib/<file>.mjs;
  3. Restart dsh web (or let the patch watcher hot-apply it).

Dependencies (@deepseek-ai/*, @modelcontextprotocol/sdk, chokidar, js-yaml) all ship with every dsh installation and resolve through the profile's node_modules — the plugin itself has no npm dependencies.

Quick start

  1. Open the Web GUI and click the floating ⚙ 扩展管理 button (or visit http://127.0.0.1:3080/dshext/).
  2. MCP tab → 添加 MCP 服务器 → pick a transport:
    • stdio: command npx, args -y @modelcontextprotocol/server-github (env GITHUB_TOKEN as JSON);
    • Streamable HTTP: URL http://localhost:3000/mcp + optional JSON headers;
    • SSE: URL http://localhost:3001/sse + optional JSON headers.
  3. The card turns green (connected, N 个工具) and the model can call mcp__<id>__<tool> immediately. Logs and the tool list are on the card.
  4. Use the other tabs to write memory / skills / commands / prompt sections, or just ask the model to do it (memory_write, skill_create, command_define, …).

MCP server configuration

Server configs live in $DSH_HOME/dshext/mcp.json (managed by the console or the model tools) — example:

{
  "servers": [
    { "id": "github", "name": "GitHub", "transport": "stdio",
      "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": { "GITHUB_TOKEN": "…" } },
    { "id": "web", "name": "Web", "transport": "streamable-http",
      "url": "http://localhost:3000/mcp",
      "headers": { "Authorization": "Bearer …" } },
    { "id": "legacy", "name": "Legacy SSE", "transport": "sse",
      "url": "http://localhost:3001/sse" }
  ]
}

Custom slash commands

# $DSH_HOME/dshext/commands/review.yaml
name: review
description: Review the current changes
hint: '[path]'
prompt: |
  Review {{args}} and output an issue list ordered by severity.

User-level commands register as /review; project commands are callable via /cmd review (and /cmd alone lists everything).

Model-facing tools

mcp_status · mcp_restart · memory_list · memory_read · memory_write · memory_delete · skill_create · skill_edit · skill_delete · command_define — plus every discovered MCP tool as mcp__<server>__<tool>.

Data files

FeatureLocation
MCP server config$DSH_HOME/dshext/mcp.json
MCP logs$DSH_HOME/dshext/logs/mcp-<id>.log
Global memory$DSH_HOME/dshext/memory/*.md
Project memory<workspace>/.dsh/memory/*.md
User skills$DSH_HOME/skills/<name>/SKILL.md
Project skills<workspace>/.dsh/skills/<name>/SKILL.md
User commands$DSH_HOME/dshext/commands/<name>.yaml
Project commands<workspace>/.dsh/commands/<name>.yaml
Prompt sections$DSH_HOME/dshext/prompts/<name>.md
Supplementary persona$DSH_HOME/dshext/persona.md

Development & tests

# syntax check every module
node --check lib/*.mjs

# 18 smoke checks (mock cordis ctx; real file round-trips; needs the dsh
# dependency tree resolvable — run from an installed copy, or give this
# package a node_modules junction to $DSH_HOME/profiles/node_modules)
node test/selfcheck.mjs

# fixture stdio MCP server used to verify the hub end to end
node test/test-mcp-server.mjs   # then add it in the console:
#   transport stdio, command <path-to-node>, args <this file>

Security

See SECURITY.md. Credentials are environment variables / config values only — nothing is hardcoded; the console binds to the same local-only DSH web server (127.0.0.1).

License

MIT © 2026 DeepSeekHarnessPlugins contributors


中文

English · ↑ 返回 dshx

面向 DeepSeek Harness(DSH)Web GUI 的扩展套件: MCP 客户端集线器(stdio / Streamable HTTP / SSE 三种协议,含状态、日志、工具面板与 Web 管理台), 以及 技能斜杠命令项目/全局记忆提示词 四类管理能力。纯 ESM JavaScript,无需构建。

模块一览

模块子路径说明
MCP 集线器dshx/mcp连接 stdio / Streamable HTTP / SSE 三类 MCP 服务器;状态机(连接中/已连接/重连中/错误)、实时日志、工具列表、指数退避自动重连;发现到的工具以 mcp__<服务器>__<工具> 注册为模型原生工具。模型工具:mcp_statusmcp_restart
记忆dshx/memory全局记忆($DSH_HOME/dshext/memory/*.md)与项目记忆(<工作区>/.dsh/memory/*.md),每次模型请求前自动注入系统提示词。模型工具:memory_list/read/write/delete。项目范围写入遵循会话沙箱策略(支持审批与 sandbox_permissions 升级)。
技能dshx/skills在技能注册表原生发现的目录($DSH_HOME/skills、项目 .dsh/skills)中创建/编辑/删除技能,改动即时进入会话技能目录。模型工具:skill_create/skill_edit/skill_delete
命令dshx/commandsYAML 自定义斜杠命令(用户级 $DSH_HOME/dshext/commands/、项目级 .dsh/commands/);用户命令直接注册为 /名称/cmd <名称> [参数] 按调用会话所在项目解析,{{args}} 替换输入参数。模型工具:command_define
提示词dshx/prompts提示词片段库(注册为带顺序/开关的系统提示词 section)、人设补充(persona.md)、以及按活跃 Agent 作用域渲染的完整 System Prompt 组装查看。
管理台dshx/manager提供 http://127.0.0.1:3080/dshext/ 管理台(MCP / 技能 / 命令 / 记忆 / 提示词 五个标签页 + /dshext/api/* JSON API),并在 Web GUI 右下角注入「⚙ 扩展管理」悬浮按钮。

安装

方式一 · dsh bundle 安装(持久化,推荐)

dsh plugin --profile web add github:YZz-S/dshx

重启 dsh webpackage.jsondsh.bundle 会应用 cordis.patch.yml 挂载上面六行。

若你此前在 profile 的 cordis.patch.yml 里手动加过 dshx 行(./packages/dshx/... 本地变体),请先删除——两种方式共用 dshx-* 行 id,重复挂载会重复注册工具与路由。

方式二 · 本地手动安装

  1. lib/*.mjs 复制到 profile 内目录(如 $DSH_HOME/profiles/web/packages/dshx/lib/);
  2. cordis.patch.yml 中的行写进 $DSH_HOME/profiles/web/cordis.patch.yml,将 name: dshx/<模块> 换成 name: ./packages/dshx/lib/<文件>.mjs
  3. 重启 dsh web(补丁层支持热重载,通常无需重启)。

依赖(@deepseek-ai/*@modelcontextprotocol/sdkchokidarjs-yaml)随 dsh 自带,经 profile 的 node_modules 解析,插件本身零 npm 依赖。

快速开始

  1. 打开 Web GUI,点击右下角「⚙ 扩展管理」(或访问 http://127.0.0.1:3080/dshext/);
  2. MCP 标签 → 添加 MCP 服务器,三种协议任选:
    • stdio:命令 npx、参数 -y @modelcontextprotocol/server-github(env 填 JSON);
    • Streamable HTTP:URL + 可选 JSON 请求头;
    • SSE:URL + 可选 JSON 请求头;
  3. 卡片变绿(connected,N 个工具),模型即可直接调用 mcp__<id>__<tool>
  4. 其余标签页管理记忆/技能/命令/提示词,也可以直接让模型调用 memory_writeskill_createcommand_define 等工具代办。

数据文件位置

功能位置
MCP 服务器配置$DSH_HOME/dshext/mcp.json
MCP 日志$DSH_HOME/dshext/logs/mcp-<id>.log
全局记忆$DSH_HOME/dshext/memory/*.md
项目记忆<工作区>/.dsh/memory/*.md
用户技能$DSH_HOME/skills/<名称>/SKILL.md
项目技能<工作区>/.dsh/skills/<名称>/SKILL.md
用户命令$DSH_HOME/dshext/commands/<名称>.yaml
项目命令<工作区>/.dsh/commands/<名称>.yaml
提示词片段$DSH_HOME/dshext/prompts/<名称>.md
人设补充$DSH_HOME/dshext/persona.md

测试

node --check lib/*.mjs     # 全部模块语法检查
node test/selfcheck.mjs    # 18 项冒烟自检(mock cordis 上下文 + 真实文件往返)
node test/test-mcp-server.mjs  # stdio MCP 测试服务器(在管理台添加后可验证全链路)

安全与许可

SECURITY.md。凭据只通过环境变量/配置传入,无任何硬编码;管理台绑定 dsh 本地 Web 服务(127.0.0.1)。MIT © 2026 DeepSeekHarnessPlugins contributors