🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

MCP 客户端中枢 YZz-S/dsh-dshx

DeepSeek Harness
YZz-S80 天前有提交已提供中文文档扫描:含敏感能力

统一接入 MCP 服务器并管理技能、记忆与斜杠命令

27.5/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add YZz-S/dsh-dshx
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · market
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 80 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 68 处,展示前 60 条)
  • 写入本地文件
    lib/mcp-hub.mjs:43
    mkdirSync(dir, { recursive: true })
  • 读取本地文件
    lib/mcp-hub.mjs:52
    const text = readFileSync(path, 'utf8')
  • 写入本地文件
    lib/mcp-hub.mjs:60
    mkdirSync(join(path, '..'), { recursive: true })
  • 写入本地文件
    lib/mcp-hub.mjs:62
    writeFileSync(tmp, JSON.stringify(value, null, 2))
  • 写入本地文件
    lib/mcp-hub.mjs:63
    renameSync(tmp, path)
  • 写入本地文件
    lib/mcp-hub.mjs:195
    mkdirSync(join(extDir(), 'logs'), { recursive: true })
  • 写入本地文件
    lib/mcp-hub.mjs:196
    appendFileSync(logFilePath(this.config.id), `${new Date(entry.ts).toISOString()} [${level}] ${entry.message}\n`)
  • 发起网络请求
    lib/mcp-hub.mjs:227
    fetch: (url, init) => fetch(url, { ...init, headers: mergeHeaders(init?.headers, headers) }),
  • 读取本地文件
    lib/mcp-hub.mjs:448
    try { current = readFileSync(hub.configPath, 'utf8') } catch { }
  • 写入本地文件
    lib/memory-store.mjs:33
    mkdirSync(dir, { recursive: true })
  • 读取本地文件
    lib/memory-store.mjs:46
    const text = readFileSync(path, 'utf8')
  • 读取本地文件
    lib/memory-store.mjs:50
    const stat = statSync(path)
  • 读取本地文件
    lib/memory-store.mjs:62
    if (!root || !existsSync(root)) return []
  • 读取本地文件
    lib/memory-store.mjs:64
    for (const file of readdirSync(root)) {
  • 写入本地文件
    lib/memory-store.mjs:83
    mkdirSync(join(path, '..'), { recursive: true })
  • 写入本地文件
    lib/memory-store.mjs:84
    writeFileSync(path, content)
  • 删除本地文件
    lib/memory-store.mjs:124
    if (fs === void 0 || typeof fs.writeText !== 'function') { rmSync(path, { force: true }); return }
  • 删除本地文件
    lib/memory-store.mjs:127
    rmSync(path, { force: true })
  • 删除本地文件
    lib/memory-store.mjs:139
    rmSync(path, { force: true })
  • 读取本地文件
    lib/memory-store.mjs:152
    if (!existsSync(path)) return null
  • 写入本地文件
    lib/memory-store.mjs:168
    mkdirSync(root, { recursive: true })
  • 写入本地文件
    lib/memory-store.mjs:169
    writeFileSync(path, content)
  • 读取本地文件
    lib/memory-store.mjs:177
    if (!existsSync(path)) return false
  • 删除本地文件
    lib/memory-store.mjs:179
    else rmSync(path, { force: true })
  • 读取本地文件
    lib/skill-manager.mjs:48
    if (!existsSync(root)) return []
  • 读取本地文件
    lib/skill-manager.mjs:50
    for (const dir of readdirSync(root)) {
  • 读取本地文件
    lib/skill-manager.mjs:52
    if (!existsSync(skillPath)) continue
  • 读取本地文件
    lib/skill-manager.mjs:54
    const text = readFileSync(skillPath, 'utf8')
  • 读取本地文件
    lib/skill-manager.mjs:69
    size: statSync(skillPath).size,
  • 读取本地文件
    lib/skill-manager.mjs:70
    mtime: statSync(skillPath).mtimeMs,
  • 写入本地文件
    lib/skill-manager.mjs:80
    mkdirSync(join(path, '..'), { recursive: true })
  • 写入本地文件
    lib/skill-manager.mjs:81
    writeFileSync(path, content)
  • 删除本地文件递归
    lib/skill-manager.mjs:120
    rmSync(path, { force: true, recursive: true })
  • 删除本地文件递归
    lib/skill-manager.mjs:130
    rmSync(path, { force: true, recursive: true })
  • 写入本地文件
    lib/skill-manager.mjs:159
    mkdirSync(dir, { recursive: true })
  • 写入本地文件
    lib/skill-manager.mjs:160
    writeFileSync(path, content)
  • 删除本地文件递归
    lib/skill-manager.mjs:170
    else rmSync(dir, { force: true, recursive: true })
  • 写入本地文件
    lib/command-manager.mjs:35
    mkdirSync(dir, { recursive: true })
  • 读取本地文件
    lib/command-manager.mjs:45
    const raw = yaml.load(readFileSync(path, 'utf8'))
  • 读取本地文件
    lib/command-manager.mjs:63
    if (!dir || !existsSync(dir)) return []
  • 读取本地文件
    lib/command-manager.mjs:65
    for (const file of readdirSync(dir)) {
  • 写入本地文件
    lib/command-manager.mjs:77
    mkdirSync(join(path, '..'), { recursive: true })
  • 写入本地文件
    lib/command-manager.mjs:78
    writeFileSync(path, content)
  • 删除本地文件
    lib/command-manager.mjs:117
    rmSync(path, { force: true })
  • 删除本地文件
    lib/command-manager.mjs:127
    rmSync(path, { force: true })
  • 写入本地文件
    lib/command-manager.mjs:260
    mkdirSync(dir, { recursive: true })
  • 写入本地文件
    lib/command-manager.mjs:261
    writeFileSync(path, content)
  • 读取本地文件
    lib/command-manager.mjs:270
    if (!existsSync(path)) return false
  • 删除本地文件
    lib/command-manager.mjs:272
    else rmSync(path, { force: true })
  • 写入本地文件
    lib/prompt-manager.mjs:29
    mkdirSync(dir, { recursive: true })
  • 读取本地文件
    lib/prompt-manager.mjs:46
    const text = readFileSync(path, 'utf8')
  • 读取本地文件
    lib/prompt-manager.mjs:78
    if (existsSync(personaPath())) {
  • 读取本地文件
    lib/prompt-manager.mjs:79
    const text = readFileSync(personaPath(), 'utf8').trim()
  • 读取本地文件
    lib/prompt-manager.mjs:91
    if (existsSync(libraryDir())) {
  • 读取本地文件
    lib/prompt-manager.mjs:92
    for (const file of readdirSync(libraryDir()).sort()) {
  • 读取本地文件
    lib/prompt-manager.mjs:132
    if (existsSync(libraryDir())) {
  • 写入本地文件
    lib/prompt-manager.mjs:159
    writeFileSync(join(libraryDir(), `${promptName}.md`), renderFile(entry))
  • 删除本地文件
    lib/prompt-manager.mjs:166
    rmSync(path, { force: true })
  • 写入本地文件
    lib/prompt-manager.mjs:171
    mkdirSync(join(personaPath(), '..'), { recursive: true })
  • 写入本地文件
    lib/prompt-manager.mjs:172
    writeFileSync(personaPath(), String(text ?? ''))
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 接入MCP服务器
  • 管理智能体技能
  • 管理记忆与斜杠命令

MCP 客户端中枢(stdio / Streamable HTTP / SSE),带 Web 控制台,服务 DeepSeek Harness——管理 MCP 服务器、智能体技能、斜杠命令、项目与全局记忆、提示词片段。

README

由 DeepSeek 最新模型翻译生成
dshx English · 中文 一个用于 DeepSeek Harness(DSH)Web GUI 的扩展套件:一个带有 Web 管理控制台 的 MCP 客户端中枢(stdio / Streamable HTTP / SSE),外加 技能、斜杠命令、项目与全局记忆 以及 提示词 管理。纯 ESM JavaScript,无需构建步骤。 - 中文 · ↑ 返回 dshx 模块 | 模块 | 子路径 | 功能 | | MCP hub | dshx/mcp | 通过 stdio、Streamable HTTP 和 SSE 连接 MCP 服务器。每服务器状态机(connecting / connected / reconnecting / error)、实时日志(环形缓冲区 + $DSH_HOME/dshext/logs/mcp-.log)、已发现工具列表、带指数退避的自动重连。已发现的工具会作为名为 mcp____ 的原生工具桥接给模型。模型工具:mcp_status、mcp_restart。 | | Memory | dshx/memory | 全局记忆($DSH_HOME/dshext/memory/.md)和项目记忆(/.dsh/memory/.md),在每次模型步骤前注入系统提示词。
展开完整文档(README 剩余 1 节)
dshx

English · 中文

一个用于 DeepSeek Harness(DSH)Web GUI 的扩展套件:一个带有 Web 管理控制台 的 MCP 客户端中枢(stdio / Streamable HTTP / SSE),外加 技能、斜杠命令、项目与全局记忆 以及 提示词 管理。纯 ESM JavaScript,无需构建步骤。

- 中文 · ↑ 返回 dshx

模块

| 模块 | 子路径 | 功能 |
| MCP hub | dshx/mcp | 通过 stdio、Streamable HTTP 和 SSE 连接 MCP 服务器。每服务器状态机(connecting / connected / reconnecting / error)、实时日志(环形缓冲区 + $DSH_HOME/dshext/logs/mcp-.log)、已发现工具列表、带指数退避的自动重连。已发现的工具会作为名为 mcp____ 的原生工具桥接给模型。模型工具:mcp_status、mcp_restart。 |
| Memory | dshx/memory | 全局记忆($DSH_HOME/dshext/memory/.md)和项目记忆(/.dsh/memory/.md),在每次模型步骤前注入系统提示词。模型工具:memory_list、memory_read、memory_write、memory_delete。项目范围的写入遵循会话沙箱策略(审批 + sandbox_permissions 升级,与内置 write 工具相同)。 |
| Skills | dshx/skills | 在 harness 技能注册表已发现的根目录($DSH_HOME/skills、/.dsh/skills)中创建 / 编辑 / 删除技能包;更改会立即出现在会话技能目录中。模型工具:skill_create、skill_edit、skill_delete。 |
| Commands | dshx/commands | 用户定义的斜杠命令,以 YAML 文件形式存在($DSH_HOME/dshext/commands/.yaml、/.dsh/commands/.yaml)。命名命令会被预先注册;通用 /cmd [args] 调度器会解析调用会话的项目目录,因此项目命令可在每个工作区中工作。{{args}} 会被替换为输入的文本。模型工具:command_define。 |
| Prompts | dshx/prompts | 提示词库($DSH_HOME/dshext/prompts/.md)注册为有序的系统提示词片段(dshx:prompts/,可配置顺序 / 启用),一个补充人设($DSH_HOME/dshext/persona.md),以及一个组装后的系统提示词检查器(使用实时 agent 作用域渲染,以便 {{model}} 等变量得以解析)。 |
| Manager | dshx/manager | 在 http://127.0.0.1:3080/dshext/ 提供 Web 管理控制台(五个标签页:MCP / Skills / Commands / Memory / Prompts,外加 /dshext/api/ 下的 JSON API),并向 Web GUI 注入一个悬浮的“⚙ 扩展管理”按钮。 |

安装

方法 1 — 作为 dsh bundle 安装(持久)

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

重启 dsh web。package.json 中的 dsh.bundle 条目会应用 cordis.patch.yml,从而挂载上述六行。

如果你之前已手动将 dshx 各行添加到你的 profile 的 cordis.patch.yml(本地 ./packages/dshx/... 变体),请先移除这些行——两者共用行 id dshx-,重复挂载会导致工具和路由被注册两次。

方法 2 — 手动本地安装(无需 npm / GitHub)

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(或让 patch 监听器热应用它)。

依赖项(@deepseek-ai/、@modelcontextprotocol/sdk、chokidar、 js-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 (环境变量 GITHUB_TOKEN 以 JSON 形式提供);
- Streamable HTTP:URL http://localhost:3000/mcp + 可选的 JSON 请求头;
- SSE:URL http://localhost:3001/sse + 可选的 JSON 请求头。
3. 卡片变为绿色(connected,N 个工具),模型即可立即调用 mcp____。日志和工具列表显示在卡片上。
4. 使用其他标签页编写 memory / skills / commands / prompt 段落,或直接让模型来完成(memory_write、skill_create、 command_define 等)。

MCP 服务器配置

服务器配置位于 $DSH_HOME/dshext/mcp.json(由控制台或模型工具管理)——示例:

{
"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" }
]
}

自定义斜杠命令

$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.

用户级命令注册为 /review;项目命令可通过 /cmd review 调用(单独使用 /cmd 会列出所有命令)。

面向模型的工具

mcp_status · mcp_restart · memory_list · memory_read · memory_write · memory_delete · skill_create · skill_edit · skill_delete · command_define —— 外加所有已发现的 MCP 工具,形式为 mcp____。

数据文件

| 功能 | 位置 |
| MCP 服务器配置 | $DSH_HOME/dshext/mcp.json |
| MCP 日志 | $DSH_HOME/dshext/logs/mcp-.log |
| 全局 memory | $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

18 项冒烟检查(模拟 cordis ctx;真实文件往返;需要可解析的 dsh 依赖树——请从已安装的副本运行,或为本包建立指向 $DSH_HOME/profiles/node_modules 的 node_modules 联接)
node test/selfcheck.mjs

用于端到端验证集线器的 fixture stdio MCP 服务器
node test/test-mcp-server.mjs # 然后在控制台中添加它:
transport stdio, command , args

安全

参见 SECURITY.md。凭据仅通过环境变量 / 配置值提供——没有任何硬编码;控制台绑定到同一个仅限本地的 DSH Web 服务器(127.0.0.1)。

许可证

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_status、mcp_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/commands | YAML 自定义斜杠命令(用户级 $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 web。package.json 的 dsh.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/sdk、chokidar、js-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____;
4. 其余标签页管理记忆/技能/命令/提示词,也可以直接让模型调用 memory_write、skill_create、command_define 等工具代办。

数据文件位置

| 功能 | 位置 |
| MCP 服务器配置 | $DSH_HOME/dshext/mcp.json |
| MCP 日志 | $DSH_HOME/dshext/logs/mcp-.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
预览分享卡片长什么样 ↓YZz-S/dsh-dshx
分享 · DeepSeek Harness Hub
YZz-S/dsh-dshx

统一接入 MCP 服务器并管理技能、记忆与斜杠命令

这是你的仓库?认领条目

回到顶部