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

MCP 代理适配器 NexusAgentX/dsh-mcp-adapter

DeepSeek Harnessv0.6.3
NexusAgentX82 天前有提交已提供中文文档扫描:含敏感能力

用单个代理工具按需调用 MCP,省下上下文窗口

32.4/100
综合分
1
GitHub 星标
174
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-mcp-adapter
npm 源 · dsh-mcp-adapter 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · dev
装得上吗
静态安装检查通过
未做真实安装
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 82 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-mcp-adapter @ 0.6.3
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/17 16:45:40

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 63 处,展示前 50 条)
  • 读取本地文件
    dist/cli.js:74
    const pkg = JSON.parse(readFileSync(join(here, '..', 'package.json'), 'utf8'));
  • 读取本地文件
    dist/config.js:154
    if (existsSync(filePath)) {
  • 读取本地文件
    dist/config.js:156
    const parsed = parseJsonConfig(readFileSync(filePath, 'utf8'));
  • 读取本地文件
    dist/config.js:169
    const beforeText = existsSync(filePath) ? readFileSync(filePath, 'utf8') : '';
  • 读取本地文件
    dist/config.js:169
    const beforeText = existsSync(filePath) ? readFileSync(filePath, 'utf8') : '';
  • 写入本地文件
    dist/config.js:172
    mkdirSync(dirname(filePath), { recursive: true });
  • 写入本地文件
    dist/config.js:174
    writeFileSync(tmpPath, afterText, 'utf8');
  • 写入本地文件
    dist/config.js:175
    renameSync(tmpPath, filePath);
  • 读取本地文件
    dist/config.js:186
    exists: existsSync(source.readPath),
  • 读取本地文件
    dist/config.js:214
    if (existsSync(filePath)) {
  • 写入本地文件
    dist/config.js:241
    mkdirSync(dirname(filePath), { recursive: true });
  • 写入本地文件
    dist/config.js:243
    writeFileSync(tmpPath, after, 'utf8');
  • 写入本地文件
    dist/config.js:244
    renameSync(tmpPath, filePath);
  • 执行外部命令来自配置/变量
    dist/utils.js:34
    const result = spawnSync(value.slice(1), {
  • 读取本地文件
    dist/agent-plugin-loader.js:59
    if (!existsSync(mcpPath))
  • 读取本地文件
    dist/agent-plugin-loader.js:61
    if (!statSync(mcpPath).isFile()) {
  • 读取本地文件
    dist/agent-plugin-loader.js:67
    raw = JSON.parse(readFileSync(mcpPath, "utf8"));
  • 读取本地文件
    dist/agent-plugin-loader.js:77
    if (!existsSync(manifestPath)) {
  • 读取本地文件
    dist/agent-plugin-loader.js:82
    if (!statSync(manifestPath).isFile()) {
  • 读取本地文件
    dist/agent-plugin-loader.js:89
    raw = JSON.parse(readFileSync(manifestPath, "utf8"));
  • 执行外部命令来自配置/变量
    dist/mcp-auth.js:269
    const result = spawnSync(keyctl, ['session', '-', node, helper], {
  • 读取本地文件
    dist/mcp-auth.js:530
    if (!existsSync(filePath))
  • 读取本地文件
    dist/mcp-auth.js:532
    const data = readFileSync(filePath, 'utf-8');
  • 读取本地文件
    dist/mcp-auth.js:537
    if (!existsSync(filePath))
  • 删除本地文件
    dist/mcp-auth.js:540
    rmSync(filePath, { force: true });
  • 删除本地文件递归
    dist/mcp-auth.js:547
    rmSync(dir, { recursive: true });
  • 发起网络请求
    dist/mcp-auth-flow.js:191
    const response = await fetch(new URL(serverUrl), {
  • 读取本地文件
    dist/metadata-cache.js:14
    if (!existsSync(cachePath))
  • 读取本地文件
    dist/metadata-cache.js:17
    const raw = JSON.parse(readFileSync(cachePath, 'utf8'));
  • 写入本地文件
    dist/metadata-cache.js:28
    mkdirSync(dirname(cachePath), { recursive: true });
  • 读取本地文件
    dist/metadata-cache.js:31
    if (existsSync(cachePath)) {
  • 读取本地文件
    dist/metadata-cache.js:32
    const existing = JSON.parse(readFileSync(cachePath, 'utf8'));
  • 写入本地文件
    dist/metadata-cache.js:42
    writeFileSync(tmpPath, `${JSON.stringify(merged, null, 2)}\n`, 'utf8');
  • 写入本地文件
    dist/metadata-cache.js:43
    renameSync(tmpPath, cachePath);
  • 写入本地文件
    dist/output-guard.js:34
    await writeFile(fullOutputPath, text, 'utf8');
  • 读取本地文件
    dist/npx-resolver.js:25
    && existsSync(cached.resolvedBin)
  • 读取本地文件
    dist/npx-resolver.js:155
    if (!existsSync(packageJsonPath))
  • 读取本地文件
    dist/npx-resolver.js:159
    pkg = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
  • 读取本地文件
    dist/npx-resolver.js:194
    let resolvedBin = binLink && existsSync(binLink) ? safeRealpath(binLink) : "";
  • 读取本地文件
    dist/npx-resolver.js:197
    if (!existsSync(resolvedBin))
  • 读取本地文件
    dist/npx-resolver.js:308
    if (!existsSync(npxDir))
  • 删除本地文件
    dist/npx-resolver.js:452
    unlinkSync(cachePath);
  • 写入本地文件
    dist/npx-resolver.js:456
    writeFileSync(cachePath, "", "utf-8");
  • 写入本地文件
    dist/npx-resolver.js:474
    mkdirSync(dir, { recursive: true });
  • 写入本地文件
    dist/npx-resolver.js:482
    writeFileSync(tmpPath, JSON.stringify(merged, null, 2), "utf-8");
  • 写入本地文件
    dist/npx-resolver.js:483
    renameSync(tmpPath, cachePath);
  • 发起网络请求
    dist/mcp-probe.js:125
    const response = await fetch(url, {
  • 写入本地文件
    dist/mcp-trace.js:93
    await appendFile(path, data, appendOptions);
  • 写入本地文件
    dist/mcp-trace.js:96
    await writeFile(path, data, writeOptions);
  • 写入本地文件
    dist/mcp-trace.js:99
    await mkdir(path, { recursive: true });
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-commands@deepseek-ai/dsh-tools@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 单个代理工具调用MCP
  • 节省上下文窗口

DeepSeek Harness 的 MCP 适配器——用一个代理工具,不用把每个 MCP schema 都塞进上下文。

v0.6.32026-08-14
Fix: client /mcp popup injects remote.commands so the menu can load.
原文(未汉化)
v0.6.22026-08-14
Fix: re-export inject so dsh web can load the plugin.
原文(未汉化)
v0.6.12026-08-14
Docs: Web /mcp is the primary configure path. Settings has no MCP form.
原文(未汉化)
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-mcp-adapter 将 MCP 服务器与 DeepSeek Harness 配合使用,而不会耗尽上下文窗口。 一个 mcp 代理工具。延迟启动服务器。按需 search / describe / call。通过 Web /mcp 菜单进行配置。 英文 | 中文 为什么需要它 DeepSeek Harness 已经内置了 @deepseek-ai/dsh-mcp-client。该客户端在启动时连接,并将每个对外公布的 MCP 工具注册为原生 mcp____ 函数。每次请求都要付出 schema 开销。 本适配器改为遵循 pi-mcp-adapter 的约定: - 一个 mcp 代理工具,而非数百个 schema - 延迟启动服务器 - 按需 search / describe / call - 标准的 .mcp.json 发现机制,外加一个可写入项目文件的 Web /mcp 菜单 - 可选的 directTools 提升,用于热路径工具 - 元数据缓存,使搜索在实时连接之前即可工作 它是一个独立插件。它与 DeepSeek AI 无关联。 不要将本适配器与 @deepseek-ai/dsh-mcp-client 挂载到相同的服务器上。它们会重复连接并争夺名称。
展开完整文档(README 剩余 1 节)
dsh-mcp-adapter

将 MCP 服务器与 DeepSeek Harness 配合使用,而不会耗尽上下文窗口。

一个 mcp 代理工具。延迟启动服务器。按需 search / describe / call。通过 Web /mcp 菜单进行配置。

英文 | 中文

为什么需要它

DeepSeek Harness 已经内置了 @deepseek-ai/dsh-mcp-client。该客户端在启动时连接,并将每个对外公布的 MCP 工具注册为原生 mcp____ 函数。每次请求都要付出 schema 开销。

本适配器改为遵循 pi-mcp-adapter 的约定:

- 一个 mcp 代理工具,而非数百个 schema
- 延迟启动服务器
- 按需 search / describe / call
- 标准的 .mcp.json 发现机制,外加一个可写入项目文件的 Web /mcp 菜单
- 可选的 directTools 提升,用于热路径工具
- 元数据缓存,使搜索在实时连接之前即可工作

它是一个独立插件。它与 DeepSeek AI 无关联。

不要将本适配器与 @deepseek-ai/dsh-mcp-client 挂载到相同的服务器上。它们会重复连接并争夺名称。

安装

dsh plugin --profile web add dsh-mcp-adapter

重启 dsh web 并强制刷新浏览器。该包是双面的:Host 部分注册工具和命令;Web 客户端部分添加 /mcp 弹窗和 MCP 工具卡片。

设置 → 插件下没有 MCP 表单。官方插件设置是一个允许列表;树外插件无法在那里注册卡片。配置在 /mcp 菜单或 JSON 文件中进行。

Web UI(主要方式)

在 Chat 中,输入 /mcp:

| 菜单 | 作用 |
| Status / Sources / Prompts | 检查状态 |
| DeepWiki、Context7、Notion、GitHub、Chrome DevTools | 一键添加到项目 .mcp.json |
| server · Connect / Authorize | 连接,或打开 OAuth 浏览器流程 |
| server · Disable / Remove | 确认,然后停止或删除 |

自定义服务器(也会写入 .mcp.json 并在进程内重新加载):

/mcp add docs url=https://mcp.example.com/mcp
/mcp add fs command=npx args=-y,@modelcontextprotocol/server-filesystem,/tmp

然后让模型执行 mcp({ search: "screenshot" })。工具卡片使用与第一方 Skill 和 Tool 行相同的 DisclosureRow / StateDot / SearchBlock 外观。approveTools 使用 Chat Ask 对话框。

文件配置(共享 / 高级用户)

如果你希望在 Cursor 或其他宿主中使用相同的服务器,首选的项目文件仍然是 .mcp.json:

{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": ["-y", "chrome-devtools-mcp@1.6.0"]
}
}
}

| 文件 | 用途 |
| ~/.config/mcp/mcp.json | 用户全局共享 MCP 配置 |
| ~/.agents/mcp.json | 用户全局、工具无关的 MCP 配置 |
| ~/.agents/mcp/mcp.json | 用户全局、工具无关的 MCP 配置 |
| .mcp.json | 项目本地共享 MCP 配置(Web 添加/移除会写入此处) |
| $DSH_HOME/mcp.json | dsh 全局覆盖(默认 ~/.dsh/mcp.json) |
| .dsh/mcp.json | dsh 项目覆盖 |

后面的文件优先。/mcp disable 和 /mcp enable 只将 disabled 字段写入 .dsh/mcp.json。它们从不复制凭据。

特定于宿主的配置(Cursor、Claude Code、Codex、OpenCode、Windsurf、VS Code)由 dsh-mcp-adapter init 和 /mcp list 检测。除非你将 settings.hostConfigDiscovery 设置为 "on" 或在 imports 中列出它们,否则它们不会被加载。

{
"imports": ["cursor"],
"settings": {
"hostConfigDiscovery": "off",
"toolPrefix": "server",
"idleTimeout": 10
},
"mcpServers": {}
}

服务器选项

{
"mcpServers": {
"my-server": {
"command": "npx",
"args": ["-y", "some-mcp-server"],
"lifecycle": "lazy",
"idleTimeout": 10,
"requestTimeoutMs": 30000,
"directTools": ["search"],
"includeTools": ["search", "get_"],
"excludeTools": ["admin_"],
"searchKeywords": {
"search": ["find", "lookup"]
}
}
}
}

| 字段 | 含义 |
| lifecycle | lazy(默认)、eager、keep-alive、lazy-keep-alive |
| idleTimeout | 空闲的 lazy 服务器关闭前的分钟数(默认 10,0 表示禁用) |
| directTools | true 或名称列表——将这些工具注册为原生 dsh 工具 |
| url / headers / bearerToken / bearerTokenEnv | Streamable HTTP;在 404/405 时回退到 SSE |
| auth / oauth | "oauth" 或 "bearer";OAuth 令牌存放在操作系统凭据存储中 |
| socket | rmcp-mux Unix 域套接字(与 command / url 互斥) |
| approveTools | true 或 glob 模式——在这些工具运行前进行 Chat Ask |
| disabled | 保持条目可见但不连接 |

模型工具

mcp({ search: "screenshot" })
mcp({ describe: "chrome-devtools_take_screenshot" })
mcp({ tool: "chrome-devtools_take_screenshot", args: { format: "png" } })
mcp({ connect: "chrome-devtools" })
mcp({ action: "auth-start", server: "notion" })
mcp({ action: "auth-complete", server: "notion", args: { redirectUrl: "http://localhost:.../callback?code=..." } })
mcp({ prompt: "create_plan", server: "agent-board", args: "harden retry policy" })

args 可以是 JSON 对象或 JSON 字符串。mcpScript 可以在一个 JavaScript 请求中循环 / 搜索 / 调用多个 MCP 工具。

人工命令

/mcp
/mcp status
/mcp list
/mcp json
/mcp setup
/mcp prompts
/mcp add-preset
/mcp add url=
/mcp add command= [args=a,b] [auth=oauth]
/mcp connect
/mcp auth
/mcp enable
/mcp disable
/mcp remove

CLI

dsh-mcp-adapter init
dsh-mcp-adapter status

状态

| 部分 | 0.6.3 |
| mcp 代理 + lazy 生命周期 + 元数据缓存 | 是 |
| Web /mcp 配置 / 连接 / 认证 | 是 |
| Web 卡片(DisclosureRow / SearchBlock) | 是 |
| Web Ask for approveTools | 是 |
| OAuth、提示词、mcpScript、Agent Plugins、套接字 | 是 |
| 设置 → 插件表单 | 否(宿主允许列表) |
| elicitation / sampling / MCP UI 应用 | 尚未在 dsh 宿主中 |

许可证

MIT

灵感来自 pi-mcp-adapter(MIT)。参见 NOTICE。

给 DeepSeek Harness 用的 MCP 适配器:一个代理工具,按需搜索 / 描述 / 调用,不把每个 MCP schema 塞进上下文。

配置入口是 Web 的 /mcp,不是 Settings。 官方插件设置页不允许外部插件挂表单。

dsh plugin --profile web add dsh-mcp-adapter

重启 dsh web,硬刷新,在输入框敲 /mcp:

- 一键添加 DeepWiki / Context7 / Notion / GitHub / Chrome DevTools(写入项目 .mcp.json,立刻生效)
- 对已有 server:连接、授权、停用、移除
- 自定义:/mcp add docs url=https://… 或 /mcp add fs command=npx args=-y,pkg

然后让模型 mcp({ search: "screenshot" })。卡片和官方 Skill / Tool 行同一套 DisclosureRow / StateDot / SearchBlock。

也可以继续用手写 .mcp.json / ~/.config/mcp/mcp.json,和其他 MCP 宿主共用。不要和 @deepseek-ai/dsh-mcp-client 挂同一批 server。
预览分享卡片长什么样 ↓NexusAgentX/dsh-mcp-adapter
分享 · DeepSeek Harness Hub
NexusAgentX/dsh-mcp-adapter

用单个代理工具按需调用 MCP,省下上下文窗口

这是你的仓库?认领条目

回到顶部