用单个代理工具按需调用 MCP,省下上下文窗口
32.4/100
综合分
1
GitHub 星标
174
npm 周下载
—/5
用户评分
数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-mcp-adapternpm 源 · dsh-mcp-adapter 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · dev
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 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🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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 都塞进上下文。
最近更新
在 GitHub 查看全部 →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。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
NexusAgentX/dsh-mcp-adapter
用单个代理工具按需调用 MCP,省下上下文窗口
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,288已汉化MCP
71.7
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9
原生编程智能体paean-ai/deeptide
由 DeepSeek 打造,为 DeepSeek 而生。
★ 1,107已汉化DSH
67.7
多引擎接力台emo-xiaoyu/harness-mix
macOS/Linux 已加入源码构建与启动适配;目标系统的完整桌面验收仍需在对应机器执行。安装方式、Linux…
★ 419已汉化DSH
66.8
这是你的仓库?认领条目