MCP连接器:在 DeepSeek Harness 接入、查找和排障 MCP Server
58.8/100
综合分
94
GitHub 星标
9,868
npm 周下载
—/5
用户评分
数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-mcp-connectornpm 源 · dsh-mcp-connector 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-mcp-connector @ 0.2.84
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 09:03:01
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 46 处,展示前 45 条)
- 发起网络请求lib/index.js:2361
const response = await fetch(url, { signal: AbortSignal.timeout(config.requestTimeoutMs) }); - 读取本地文件scripts/probe-connector.mjs:40
const raw = JSON.parse(await readFile(input, 'utf8')); - 写入本地文件scripts/probe-connector.mjs:67
if (output) await writeFile(output, json, { mode: 0o600 }); - 读取本地文件lib/catalog.js:40
const raw = readFileSync(new URL('../catalog/catalog.json', import.meta.url), 'utf8'); - 发起网络请求lib/catalog.js:183
const dispatcher = httpProxy || httpsProxy ? new EnvHttpProxyAgent() : undefined; - 发起网络请求lib/catalog.js:189
const response = await fetch(catalogUrl, { - 发起网络请求lib/oauth.js:37
const response = await fetch(url, { ...options, signal: controller.signal }); - 发起网络请求lib/oauth.js:85
const response = await fetch(streamUrl, { - 发起网络请求lib/oauth.js:395
const response = await fetch(revocationEndpoint, { - 读取本地文件lib/web.js:431
const raw = await readFile(file.path); - 读取本地文件lib/version-status.js:8
const packageJson = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')); - 执行外部命令来自配置/变量lib/util.js:31
const child = spawn(command, args, options); - 发起网络请求lib/probe.js:19
return await fetch(url, { ...options, signal: controller.signal, redirect: 'follow' }); - 读取本地文件lib/cli-providers.js:352
if (existsSync(native) && statSync(native).isFile()) return native; - 读取本地文件lib/cli-providers.js:352
if (existsSync(native) && statSync(native).isFile()) return native; - 读取本地文件lib/cli-providers.js:353
if (existsSync(path.join(dir, 'dws.cmd'))) sawShim = true; - 读取本地文件lib/cli-providers.js:358
if (!existsSync(path.join(root, 'package.json'))) continue; - 读取本地文件lib/cli-providers.js:360
const pkg = JSON.parse(readFileSync(path.join(root, 'package.json'), 'utf8')); - 读取本地文件lib/cli-providers.js:367
if (relative.startsWith('..') || path.isAbsolute(relative) || !statSync(binary).isFile()) continue; - 执行外部命令来自配置/变量lib/cli-providers.js:383
const child = spawn(executable, args, { - 写入本地文件lib/grant-journal.js:45
await rename(temp, path); - 写入本地文件lib/grant-journal.js:46
await chmod(path, 0o600); - 删除本地文件lib/grant-journal.js:48
await rm(temp, { force: true }).catch(() => {}); - 写入本地文件lib/grant-journal.js:82
await mkdir(this.rootDir, { recursive: true, mode: 0o700 }); - 写入本地文件lib/grant-journal.js:83
await chmod(this.rootDir, 0o700); - 读取本地文件lib/grant-journal.js:97
return parseDocument(await readFile(this.recordPath(grantKey), 'utf8'), this.recordPath(grantKey)); - 读取本地文件lib/grant-journal.js:108
const names = await readdir(this.rootDir).catch((error) => { - 读取本地文件lib/grant-journal.js:116
const grant = parseDocument(await readFile(path, 'utf8'), path); - 删除本地文件lib/grant-journal.js:136
await rm(this.recordPath(grantKey)); - 删除本地文件lib/grant-journal.js:162
await rm(path, { force: true }).catch(() => {}); - 读取本地文件lib/grant-journal.js:168
const lockStat = await stat(path).catch(() => null); - 删除本地文件lib/grant-journal.js:170
await rm(path, { force: true }); - 读取本地文件lib/grant-journal.js:186
const current = await readFile(path, 'utf8').catch(() => ''); - 删除本地文件lib/grant-journal.js:188
await rm(path, { force: true }).catch(() => {}); - 执行外部命令固定命令lib/stdio-startup-guard.js:39
killer = spawn('taskkill.exe', ['/PID', String(child.pid), '/T', '/F'], { stdio: 'ignore', windowsHide: true }); - 读取本地文件scripts/build-registry.mjs:8
const files = (await readdir(directory)).filter((file) => file.endsWith('.json') && !file.endsWith('.sample.json')).sort(); - 读取本地文件scripts/build-registry.mjs:10
for (const file of files) raw.push(JSON.parse(await readFile(resolve(directory, file), 'utf8'))); - 写入本地文件scripts/build-registry.mjs:12
await writeFile(output, `${JSON.stringify({ schemaVersion: 1, connectors }, null, 2)}\n`); - 读取本地文件scripts/ui-harness.mjs:14
const packageJson = JSON.parse(await readFile(join(root, 'package.json'), 'utf8')); - 读取本地文件scripts/ui-harness.mjs:17
const document = JSON.parse(await readFile(path, 'utf8')); - 读取本地文件scripts/ui-harness.mjs:183
const body = await readFile(join(root, 'ui/index.html')); - 读取本地文件scripts/ui-harness.mjs:187
const body = await readFile(join(root, 'ui/locale.js')); - 读取本地文件scripts/ui-harness.mjs:191
const body = await readFile(join(root, 'ui/sharing-experience.js')); - 读取本地文件scripts/ui-harness.mjs:195
const body = await readFile(join(root, 'ui/connection-template-sharing.js')); - 写入剪贴板ui/connection-template-sharing.js:158
await clipboard.writeText(text);
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-storage@deepseek-ai/dsh-storage-domain@deepseek-ai/schemastery@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-layout@deepseek-ai/dsh-mcp-client给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
6 张 · 点击查看大图功能亮点
- 接入MCPServer
- 跨连接搜索工具
- 排查发现故障
最近更新
在 GitHub 查看全部 →v0.2.922026-11-01
· 变更内容
· QMCP-2014 修复:分类箭头导航,发布 0.2.92
完整变更日志:
v0.2.912026-11-01
· 变更内容
· QMCP-2014 文档:npm 概览双语版,0.2.91 的英文媒体素材
完整变更日志:
v0.2.902026-11-01
· 变更内容
· QMCP-2014 新功能:紧凑工具栏,发布 0.2.90
完整变更日志:
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成展开完整文档(README 剩余 1 节)
MCP连接器:在 DeepSeek Harness 接入、查找和排障 MCP Server
DeepSeek Harness 的 MCP 接入与管理面板:超百个 MCP连接器,一个入口完成 MCP Server 授权配置、跨连接工具搜索与连接排障。
从持续更新的连接器目录接入 MCP Server;跨当前范围内已启用连接查找工具,查看易读参数、来源和最后成功缓存时间,并在发现异常时检查连接或重新发现工具。支持 OAuth 2.0 PKCE、API Key、Streamable HTTP/stdio 与 mcpServers JSON 导入。
OAuth 是否可用取决于服务商的客户端注册、账号权限与授权政策;连接已保存、工具已发现和业务调用成功应分别验证。
注:「技能扩展」指通过 MCP 工具和 Prompt 扩展智能体能力,本包不会伪装成独立 DSH Skill。
工具查找与故障处理
在「工具」页统一查找当前工作区可见、已启用连接的工具。输入工具名或描述,再按连接、服务和最近发现状态筛选;点击「参数详情」查看类型、必填项与嵌套结构。未选择工作区时,仅展示全局连接。
结果标注来源和最后成功缓存时间。发现失败时仍可查看已有缓存,但不代表服务当前可调用。展开「连接状态与故障处理」,按建议使用「检查连接」或「重新发现工具」。健康连接五分钟后到期,页面保持连接时后台检查到期任务;失败时退避,鉴权失败暂停自动重试。
详见工具工作台教程。工具页用于发现与诊断,不执行目标工具;参数摘要与原始安全缓存均有裁剪边界。
用户手册 · 第三方连接器上架指南 · 首次贡献 · 参与贡献 · 问题反馈
开始使用
在插件市场搜索完整包名 dsh-mcp-connector,或在本机终端运行下方命令。当前默认 Desktop 和 Web 都使用 web profile;自定义部署请以宿主实际加载的 profile 为准。
dsh plugin --profile web add dsh-mcp-connector
安装或升级后完全重启 DeepSeek Harness Desktop 或 dsh web,然后打开左侧「MCP连接器」;也可从「设置 → 插件 → 插件配置 → MCP连接器」直接打开。
Desktop 需要完全退出并重新启动应用;Web 需要停止原 dsh web 进程再启动,只刷新网页不会重新加载后端插件。
先完成一件事:查询一家企业的简介,按步骤核对授权、工具来源和真实返回。想写体验文章?使用社区分享素材包,包含演示素材、文章提纲和脱敏记录模板。
首次使用建议依次确认:连接已保存且范围正确 → 「工具」页能找到预期工具与来源 → 在正常 DSH 会话中通过 Host 审批链完成一次服务商许可的只读调用。缓存可见不等于当前服务可调用。
首次成功入口:安装 → 连接 → 找到工具 → 首次只读调用。按任务深入:三个可验收场景包 · 迁移现有 mcpServers JSON · OAuth 授权诊断 · 跨连接找工具与恢复 · 可信状态文案。
MCP 连接器 43 秒演示
如果它帮你更快地接入 MCP Server,欢迎 GitHub 点个 Star、提交新的连接器或参与贡献。
MCP连接器能做什么
| 能力 | 用户得到什么 |
| 持续更新的连接器目录 | 浏览精选与 9 类业务连接器;Registry 更新后刷新即可获取新卡片 |
| 多种接入方式 | 使用 OAuth 2.0 PKCE、API Key、Streamable HTTP/stdio 或 mcpServers JSON 接入 |
| 跨连接工具查找 | 在当前范围内已启用连接的最后成功缓存中按名称或描述搜索,并按连接、服务和状态筛选 |
| 易读参数与来源 | 查看类型、必填、枚举、嵌套摘要、来源、缓存时间及安全裁剪后的 Schema |
| 连接排障 | 根据明确的阶段和错误码检查连接或重新发现工具,同时保留可用的最后成功缓存 |
| 作用域与治理 | 管理 project/global 可见范围以及 Connection、Server、Tool 三层规则 |
| 按会话工具注入 | 连接保持在线,对选定连接默认隐藏 schema,只在当前 Agent 临时激活精确工具 |
| 安全生命周期 | 支持凭据本机存储、授权刷新、脱敏备份、快照回滚及失败时保留原连接 |
| 插件更新 | 检测新版本,并在宿主提供兼容 Update Provider 时显示进度、失败原因和回滚结果 |
功能
- 左侧主导航入口:DSH >=0.2.0-rc.2 使用官方 sidebar.panellist 行与原生主面板,继承宿主选中态、折叠提示和无障碍行为;DSH 0.1.x 自动回退到兼容入口。
- 侧边栏入口可按当前 profile 隐藏;隐藏后仍可从“设置 → 插件 → 插件配置 → MCP连接器”临时打开现有连接器弹框,用完即关。
- 图形化市场:默认“全部”按推荐与 9 类业务分类分章节展示,每章先展示 4 张并可展开;分类栏固定可见,单分类页展示全部卡片。
- 图形化添加:手动 HTTP/stdio、mcpServers JSON、连接器描述 URL 三种入口,失败时保留表单并给出修复建议。
- 连接器详情:精选 Prompt 优先展示,点击可带入 DSH 新会话;工具按 Server 分组,支持描述、搜索、参数详情和独立滚动。实时发现失败时显示带时间/陈旧标记的最后成功工具缓存。
- 实时状态:页面通过同源 SSE 接收连接、目录、健康、工具、治理和作用域变化通知并自动刷新;事件不携带连接标识、端点、错误或凭据。
- Prompt 模板:使用 {{company}} 等变量,发送前填写真实查询主体。
- 三种接入:OAuth 2.0 PKCE、自定义 HTTP/stdio、导入 mcpServers JSON;也支持从连接器描述 URL 安装。OAuth 动态注册兼容公共客户端以及 client_secret_post / client_secret_basic 机密客户端。
- 市场 Bearer/API Key 连接器先执行 MCP initialize 连通性与凭据校验,全部 HTTP Server 通过后才持久化凭据并进入“已安装”;stdio 卡片可声明多个本机凭据字段及其环境变量映射。
- 生命周期管理:连接持久化、重启恢复、启停、断开、OAuth 自动刷新/退避恢复与撤销;同 issuer 卡片共享一次授权,跨进程锁与独立原子 Grant journal 防止 Desktop/Web 并行时重复消耗 Refresh Token。
- 配置原地编辑:自定义和 JSON 导入连接可在“已安装”中编辑标准化 JSON 并重新连接;敏感值以本机保留标记处理,校验、启动或保存失败时原连接继续可用。
- 本地参数覆盖(#146,0.2.76):无凭据市场 stdio 连接支持在首次连接确认框填写“高级本地参数”,以及在已安装列表编辑 argsAppend、env、cwd,不修改目录或连接身份;已有值不回传浏览器,支持快照恢复和清除覆盖。首次连接留空沿用市场参数,已有连接留空保留原覆盖;启动失败保留表单可修改重试。不支持 OAuth、凭据绑定、CLI 桥接或完整参数替换;真实 Desktop/Windows 验收尚未完成。
- 配置备份:一键复制/下载可再次导入的脱敏 JSON;连接变更前自动保存最多 20 个本机快照,支持预览与原子恢复。凭据、本地路径和 OAuth Grant 不进入导出结果。
- 连接作用域:新连接可选当前 Workspace 项目或 profile 全局;支持先预览 Server/工具影响,再复制、移动或按 revision 回滚。凭据只存一份,project-only 工具由 DSH Host 强制隔离。
- 三层治理:Connection、Server、Tool 规则按 Tool > Server > Connection > 默认允许解析;变更先预览,按 revision 提交,可回滚,由 DSH Host 的 schema/lookup/dispatch restriction 与最终执行 Guard 真实生效。
- 按会话注入工具:「已安装」连接可选「始终注入」或「按会话启用」。后者不断开 Server,只由 Host 在当前智能体隐藏业务工具;明确预览并确认后临时激活精确工具,最长 30 分钟,会话或进程结束后清空。
- 可解释诊断:只报告实际观察结果;未检查或 Host 状态不可见时显示「状态未知」,并提供失败阶段、稳定错误码、建议动作、检查时间和进程内最近成功时间。
- 目录运营:内置目录、远程 registry、本地覆盖,支持 published 上下架与 featured 精选。
- 独立远程 Registry:新市场卡片合并后客户端刷新即可见,无需重新发布 npm;远程不可用时自动回退内置目录。
- 插件版本与一键更新:版本发现独立于安装来源;页面通过 Update Provider 适配层探测安全更新能力。DSH Market API v1 是首个适配器,支持进度、稳定失败码、回滚,以及按宿主能力提供的重启/刷新操作;无可用 Provider 时回退到当前插件市场或 npm。
- Registry 工具链:Schema/唯一性/密钥审计、MCP/OAuth 无凭据探针、每周健康巡检。
- 平滑迁移:显式扫描并复制两个旧企查查 OAuth 插件授权;检测到旧插件仍启用并管理同名 Server 时阻断重复连接,避免凭据相互覆盖。
- 对话工具:mcp_connector_catalog、connect、configure、import_json、export_config、snapshot、install_from_url、status、scope、health_check、policy、set_enabled、session_tools、disconnect、refresh_catalog、publish、tools_list、tool_search、tool_detail。搜索/详情只做渐进式能力发现,不执行目标 MCP 工具。
截至 2026-10-24,公共 Registry 已发布 112 条连接器描述;与随包的 4 张企查查卡片合并去重后,市场页可浏览 116 张卡片,覆盖企业数据、金融投资、法律合规、开发工具、办公协作、调研分析、设计创意、效率工具、其他 9 类。推荐位严格保留 4 张企查查卡片、北大法宝和 Wind,共 6 张;其他连接器按业务分类展示。Registry 可独立持续更新,实际数量以客户端刷新后的市场页签徽标和上方实时统计徽标为准。
界面与演示
| 市场总览 | 连接器详情与精选 Prompt |
| 市场总览 | 连接器详情 |
| 工具发现、描述与独立滚动 | JSON 导入 |
| 工具发现 | JSON 导入 |
| 统一工具搜索与来源 | 参数详情与安全 Schema |
| 统一工具搜索 | 工具参数详情 |
| 连接诊断与最后成功缓存 | |
| 连接诊断 | |
截图与 GIF 采集自 v0.2.84(2026-10-29)无凭据 Mock 页面,展示界面而非真实业务验收;市场数量是测试夹具。来源与更新方法见 素材说明。
安装
要求:DeepSeek Harness Desktop/web profile,Node.js 20 或更高版本。
dsh plugin --profile web add dsh-mcp-connector
也可使用安装脚本:
bash <(curl -fsSL https://raw.githubusercontent.com/duhu2000/dsh-mcp-connector/main/install.sh)
重复执行安装命令即可升级。安装或升级后需完全退出并重启 DeepSeek Harness Desktop;使用 dsh web 时需先停止原进程再启动,EADDRINUSE 127.0.0.1:3080 表示已有实例正在运行。
使用
1. 点击左侧「MCP连接器」,或从「设置 → 插件 → 插件配置 → MCP连接器」点击「打开 MCP连接器」。
2. 在市场中选择连接器,确认「当前项目」或「所有项目(全局)」,再完成授权或配置。
3. 打开卡片详情,可点击示例 Prompt 的发送按钮,在当前工作区创建/复用空白会话并写入草稿。
4. 在「已安装」或对话工具中查看、停用、恢复或断开连接。
5. 连接后打开「工具」页,按工具名或描述查找能力,用连接/服务筛选定位来源;授权、费用及正式调用仍由相应服务与 DSH Host 管理。
连接成功后,工具按 mcp__<serverName>__ 前缀提供给模型。
分类浏览、鉴权与连接状态、自定义 HTTP/stdio、JSON 导入、脱敏备份、可解释诊断、兼容矩阵、责任边界与故障排查见完整的用户手册。
中文教程与生态入口
- 用户手册:安装、授权、诊断、兼容性与故障排查
- 首次成功入口:安装、连接、找工具和首次只读调用
- 任务教程:JSON 迁移、OAuth 诊断、跨连接找工具与恢复
- 配置备份:脱敏导出、快照与恢复边界
- 连接作用域:project/global 继承、复制、移动与回滚
- 连接、Server 与 Tool 治理
- 按会话启用工具:显式激活、TTL 与 Host 安全边界
- 工具试运行:官方 API 证据与安全设计
- 插件更新:版本检测、Provider 与回滚
- 市场注册:本地卡片、公共 Registry 与 OAuth 要求
- 第三方连接器上架指南
- 首次贡献:从 good first issue 到第一个 PR
- 开发、Fork 与贡献指南
- 增长基线与月度复盘模板
配置
Bundle 默认配置位于 cordis.patch.yml:
- id: mcp-connector
name: dsh-mcp-connector
config:
catalogUrl: 'https://cdn.jsdelivr.net/gh/duhu2000/dsh-mcp-connector-registry@main/catalog.json'
persistSecrets: true
entryPrefix: mcp
refreshSkewMs: 300000
openBrowser: true
showSidebarEntry: true
compactManagementTools: false
frameAncestors: ['self']
catalogUrl 默认通过 jsDelivr CDN 读取公共 dsh-mcp-connector-registry,支持 ETag/TTL 缓存;主源失败时自动尝试 GitHub raw 备用源,再回退到上次缓存或随包内置目录。jsDelivr 的分支 URL 可能存在缓存延迟,因此 Registry 合并后的新卡片不保证秒级出现。需要离线/私有模式时可将 catalogUrl 显式设为空字符串;显式配置其他目录 URL 时不会自动切换到公共备用源。
远程目录请求(包括备用源)支持 HTTP_PROXY、HTTPS_PROXY、NO_PROXY 及其小写形式;同时存在时小写变量优先,未设置 HTTPS_PROXY 时 HTTPS 请求使用 HTTP_PROXY。代理地址须为 HTTP(S) URL;需要直连的目标可加入 NO_PROXY(例如 localhost,127.0.0.1)。Node.js 20+ 无需添加 --use-env-proxy;此行为不会修改 Host 的全局 fetch dispatcher 或 MCP 传输配置。
代理变量必须存在于正在运行的 DSH 进程中。修改后请完全退出并重启 DSH Desktop,或从已设置变量的终端启动 dsh web;修改 Windows 用户环境变量不会更新已有进程。连接器不会读取系统代理设置,也不会猜测本机代理地址。
showSidebarEntry 默认为 true。用户可在 DSH 插件配置页覆盖该值;关闭后只隐藏侧边栏快捷入口,不停用连接器、已连接 MCP Server 或工具。
compactManagementTools 默认为 false,兼容原有对话管理工具。希望降低管理工具上下文开销时,可在插件配置中设为 true 并重载插件(必要时重启 DSH),下一次推理使用新工具集:
- 只注册 mcp_connector_discover(市场、连接状态、缓存工具搜索/详情)和 mcp_connector_session_tools(原有会话工具可见性管理)两个入口。
- 连接、授权、编辑、导入、快照、迁移等管理操作使用 MCP连接器界面;精简模式没有任意工具执行代理,也不自动加载全部管理工具。纯对话部署或依赖旧工具名的自动化应保持 false。
- 此开关不减少已连接服务的业务工具数量,不停用连接、不迁移凭据、不修改作用域/治理规则。业务工具需要按需可见时,仍使用原有「按会话启用」。会话确认、TTL 与 Host 审批保持不变。
- 例如发现入口可用 {"action":"search","query":"天气","limit":5};查询连接状态可用 {"action":"status"}。详情使用 action=detail 和必填 toolName,市场搜索使用 action=catalog 与可选 keyword。
- 设回 false 并重载插件可恢复旧管理工具名;不要同时运行两份插件。工具数量和 schema 大小的减少不等于实测 token 或费用节省。
frameAncestors 默认为 ['self'],即面板页面(/mcp-connector/ui/)的 CSP 只允许同源页面内嵌,这是既有行为,不做任何放宽。在桌面壳(Tauri/Electron)里把面板嵌进壳窗口时,祖先源与面板自身不同源,浏览器会以 Framing '...' violates the following Content Security Policy directive: "frame-ancestors 'self'" 拦截并导致面板白屏;此时需要由部署方/用户显式追加外壳源:
frameAncestors: ['self', 'http://tauri.localhost', 'tauri://localhost']
这是有意的安全取舍,不是遗漏:frame-ancestors 无法验证嵌入方到底是谁,所以插件不会默认把 Tauri 之类的外壳源硬编码进去——写进白名单就等于允许任何跑在该源上的页面内嵌本机面板。取值只接受 CSP 关键字(self / none / )与 host-source(https://.example.com、127.0.0.1:3080、tauri://localhost、http://tauri.localhost:1420 等,可带 scheme、端口与路径);含 ;、逗号、空格或 'unsafe-inline' 一类非 host-source 关键字的值会被整条丢弃(避免 CSP 头注入),过滤后为空则回退 ['self'],而不是放行任意源。请只填自己信任的源。
兼容性与责任边界
| 项目 | 当前边界 |
| 宿主与运行时 | DSH Desktop / web profile,Node.js 20+ |
| MCP 客户端 | 官方 @deepseek-ai/dsh-mcp-client ^0.1.1-rc.2 |
| 传输 | Streamable HTTP、stdio;旧 sse 归一为 Streamable HTTP |
| 配置作用域 | Workspace project / profile global;全局由项目继承,Host 强制隔离,支持预览、复制/移动和 revision 回滚 |
| 配置交换 | JSON 导入、脱敏导出、最多 20 个本机快照、预览与原子恢复 |
| 治理与执行 | Connection / Server / Tool allow/deny,预览、revision 提交与回滚;暂无工具试运行 |
| 会话注入 | 默认 always;可对单条连接显式选择 session,由 Host restriction + guard 按 Agent 隔离,内存 TTL 最长 30 分钟 |
插件负责目录、授权、连接记录、官方客户端条目、治理规则、只读健康检查、工具发现和诊断;DSH Host 与官方 MCP 客户端负责 transport、stdio 子进程、工具注册、正式工具执行及权限/审批链。治理通过 Host 官方 restriction/guard 生效,插件不会从浏览器旁路调用 MCP 工具。详细状态语义、限制与排障见用户手册第 7–10 节。
开发与发布门禁
npm run check
npm run marketing:check:live
npm run registry:build
npm run registry:validate
npm run market:check
npm run dev:ui
marketing/metadata.json 是 npm 描述/关键词、GitHub About/Topics、中英文首屏 CTA 和外部分发文案的事实源。check 会离线阻断仓库内漂移;marketing:check:live 进一步核对线上 GitHub 与 npm,供元数据调整和月度复盘时执行。market:check 检查外部 DSH 市场 PR 与线上目录;dev:ui 启动不含真实凭据的本地 mock 市场。CI 使用 --legacy-peer-deps 安装显式测试依赖,DSH 运行期 peer 仍由 Host 提供。v Tag 会触发 GitHub Actions;Tag 必须与 package.json 版本一致。Release 通过 npm Trusted Publishing (GitHub OIDC) 发布,不依赖长期 NPM_TOKEN。
公共 Registry 每次合并后会生成 catalog-stats.json;本仓库的定时工作流每小时同步中英文介绍和统计快照。npm 页面中的静态正文随版本发布更新,上方动态统计徽标则直接读取 Registry,可在不发布新 npm 版本时保持实时数量一致。
当前公开版本为 dsh-mcp-connector@0.2.84,对应 GitHub Release v0.2.84。
版本能力与变更记录见 CHANGELOG.md。
Desktop 发版回归见 docs/DESKTOP-E2E.md。
市场卡片、公共 registry 与 OAuth 一键授权要求见 docs/MARKET-REGISTRATION.md。
stdio 传输的架构、透传边界与安全约束见 docs/STDIO-SUPPORT.md。
第三方服务商提交市场卡片请阅读 Registry 的第三方连接器上架指南,无需修改插件代码或等待插件重新发布 npm。
安全与限制
- 凭证只持久化在本机 DSH storage 边界:连接记录使用 storage domain,OAuth 轮换凭据同步保存到 $DSH_HOME/storages/mcp_connector_grants_v1。该目录为 0700、文件为 0600;凭证不进入市场目录、Git 仓库、页面、日志或对话历史。
- 市场 Key/Token 校验失败时不写入 storage domain;鉴权、超时、DNS、TLS/网络错误会分类提示。
- 未检查或 Host 状态不可见时显示「状态未知」,不会冒充健康;健康摘要与最近成功时间当前只保留在插件进程内。
- 外部 URL 默认仅允许 HTTPS,HTTP 默认仅允许回环地址。用户自建连接可在明确风险确认后放行 RFC1918 IPv4 / RFC4193 IPv6 ULA 字面量;域名、公网 HTTP、链路本地与云元数据地址仍拒绝。
- 远程目录/描述响应限制 2 MiB,Web API 请求限制 1 MiB;原始 JSON 在归一化前扫描凭据字段。
- 完整覆盖 Streamable HTTP 与 stdio;旧 sse 配置在导入/恢复时归一为 Streamable HTTP。重启恢复 stdio 连接时使用透明的启动保护进程包装原命令,env/cwd 与持久化记录保持不变;工具注册和正式执行仍由 @deepseek-ai/dsh-mcp-client 负责。
- 恢复连接的 server/discover、initialize 与首次 tools/list(含分页)按 requestTimeoutMs 限时,最长每次 15 秒;超时结束该连接的子进程,而不是让可选 MCP 卡住 Host 启动。连接保持启用,首次发现完成后的请求仍使用 Host 原有超时。
- 对本身不是 MCP Server 的官方 CLI,使用独立的受控 CLI Provider桥接为 stdio MCP;只允许代码登记的命令与参数,首个钉钉 dws Provider 仅开放只读能力。
- stdio 会启动本机进程:仅导入或连接可信命令/软件包。市场目录只能用 credentialFields + credentialBindings 声明输入与 env 映射,不得携带真实 token/secret;用户填写值只写入本机连接记录并交给 Host。
- OAuth DCR 的 client_secret 与 Access/Refresh Token 采用相同的本机存储边界,不会进入市场 API、状态输出或日志。
- OAuth 连接失败会标明资源发现、服务发现、客户端注册、授权回调或 Token 换取阶段;DCR HTTP 403 表示服务商拒绝未准入客户端,不是用户未点击授权。
- 脱敏导出把 Token/API Key、静态 Header/env 值、stdio 参数、本地目录及带查询参数的 URL 替换为占位符;OAuth 只保留重新授权引用。快照中的完整配置仍只在当前 profile 的 storage domain 内。
- 顶部入口通过 DSH 稳定 data-slot 定位并使用 React Portal;DSH 若移除该标记,入口会回退到底部,不影响连接器功能。
- 旧授权迁移必须显式确认,只复制不删除;确认新连接可用后再手动停用旧插件。
- project/global 作用域仅在当前 DSH profile 内生效;不会跨 profile 同步。删除 Workspace 后,原 project-only 绑定保持 fail closed,需手动移动到其他项目或全局。
- 当前没有工具试运行;治理与作用域都由 DSH Host 正式工具执行链强制应用。试运行已完成官方 API 复核,但在 out-of-turn 审批编排和 MCP 副作用元数据缺口补齐前保持 design blocked。快照不能恢复服务端已撤销的 OAuth Grant。
License
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
duhu2000/dsh-mcp-connector
MCP连接器:在 DeepSeek Harness 接入、查找和排障 MCP Server
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,025未汉化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,358已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13938 个插件含 PR 收录与…
★ 350已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7