统一接入 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
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 80 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
YZz-S/dsh-dshx
统一接入 MCP 服务器并管理技能、记忆与斜杠命令
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,225未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,370已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13941 个插件含 PR 收录与…
★ 355已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目