wingsky-1/dsh-plugin-hub--packages-dsh-mcp-manager ↗★ 16
@wingsky-1/dsh-mcp-manager
DSH MCP 管理器:Web 侧边栏「MCP」入口,面板按状态分级展示 MCP 服务器(运行中/连接中/已配置/失败),支持快速接入(stdio / streamable-http 表单)与粘贴 mcpServers JSON 导入。已连接服务器的工具以 mcp__<server>__<tool> 注册给模型直接调用。
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:wingsky-1/dsh-plugin-hub#9dc74922bc481b9e517f245538501740b6b9bbb4&path:packages/dsh-mcp-manager说明文档
阅读完整 README ↗配置(浮窗位置)
浮窗按钮(MCP 胶囊)的位置与偏移在 dsh 设置 → 插件 → MCP 管理器 的插件卡中配置
(position / offset),走插件自身 Config 标准 cordis 配置注入,无需手改任何配置文件。
| 键 | 值域 | 默认 |
|---|---|---|
position | top-right(右上,默认)/ top-left(左上)/ bottom-right(右下)/ bottom-left(左下) | top-right |
offset.x | 非负整数(水平偏移,单位 px) | 8 |
offset.y | 非负整数(垂直偏移,单位 px) | 8 |
offset.blankY | 非负整数(空白会话垂直偏移,单位 px) | 40 |
zIndexBase | 整数,clamp 到 1–9000(浮窗层级基准;胶囊与点击后弹出的主面板同取该配置值,模态管理面板不受影响) | 10 |
当 position = bottom-right 或 bottom-left 时,下拉面板会在胶囊上方展开(底部
锚点向上弹出),不溢出视口、内容完整可见可点击;顶部锚点向下展开(历史行为,默认不变)。
移动端 / 平板端适配(issue #128):断点判定基准是会话容器(conversationHost)
的视口宽度而非窗口媒体查询——窄屏(≤480px,手机竖屏 / 极窄分栏)下面板近全屏宽、
服务器卡片重排、操作按钮触控目标加大到 ≈44px;平板档(≤834px)过渡;桌面维持现状。
浮窗最终坐标经 JS 视口 clamp(safe-area 语义:宿主无 viewport-fit=cover,
env(safe-area-inset-*) 恒 0 时自然退化为普通 clamp);软键盘弹出经
visualViewport resize 跟随,横竖屏切换后下一帧重算。
跨包避让契约(源自 issue #116,不可回退):本插件浮窗默认 top-right 且距顶
8px、高约 26px;dsh-provider-usage 用量胶囊依赖这一默认位置以 offsetY: 48
在其正下方让位(两胶囊默认互不重叠)。修改本插件默认锚点 / 垂直偏移会使该避让
失效,属跨包行为契约,回退前须同步调整 provider-usage 默认值。
在设置页保存后即时生效,无需重启 dsh web、也无需手动刷新页面:宿主端经既有
SSE events 通道推送一变,客户端自动重新拉取 /api/dsh-mcp/config 并就地更新浮窗位置。
配置(中间层)
项目级 MCP 经中间层访问(middleware: project,默认):项目级服务器不再注册
mcp__ 工具,改经模型面四个原子工具访问(两级发现,业界标准形态)——
ws_mcp_list(完整盘点当前工作空间全部服务器 + 每台完整工具清单,不受
ws_mcp_search 的 limit 截断;支持 server 全名/裸名过滤,perServerLimit
每服务器工具条数上限默认 50 / 上限 500,超限置 toolsTruncated;空返回附明确
message,带 server 过滤 0 命中时 message 归因到过滤条件并列出可见项目级
服务器)/ ws_mcp_detail(按 @/ + tool 裸名精确查询单工具
完整 inputSchema,错误三分:发现失败附原因 / 服务器未连接或未发现 / 工具
不存在)/ ws_mcp_search(关键词检索,先搜后调,输出 truncated 标志提示结果是否因
limit 截断)/ ws_mcp_call(按 @/ 全名调用,参数 schema 用
ws_mcp_detail 核对),执行时按调用方会话当前 cwd 路由到对应工作空间
连接池,不同工作空间注入不同 MCP、无命名冲突;全局服务器仍直呼
mcp____(project 模式 detail/call 传全局级服务器会给出直呼引导)。
切换 middleware: off 回到旧行为(项目级也直接注册
mcp__ 工具);middleware: all 则全局服务器(含运行时注入的封装定义服务器)
也走中间层(cwd 无项目时回落全局
虚拟 root @global),模型面完全收敛为四个原子工具——此时 list/search/detail
合并查询「项目 root 单元 + @global 单元」,call 放行 @global root(全局配置
跨工作空间共享,语义成立)。注:all 模式全局服务器增删改后需重启或触发会话
触达才刷新目录(既有行为)。
中间层模式可在设置页热切换(设置 → 插件 → MCP 管理器 → 中间层模式下拉), 保存即生效并持久化,无需重启 dsh web。
| 键 | 值域 | 默认 |
|---|---|---|
middleware | off / project(推荐)/ all | project |
middlewarePolicy | { allowTools: {: [glob]}, denyTools: {: [glob]} }(serverKey 为 @/ 全名(工作空间隔离)或裸名(跨空间共用),全名优先;deny 优先) | {} |
工具级禁用(浮窗)
- 服务器卡片的「工具(N)」折叠区展开后为 checkbox 列表,逐个启停,点击即
经
PATCH /api/dsh-mcp/tool-disable持久化(落盘/dsh-mcp-user-state.json的disabledTools,合并写盘、重启保留); - 语义:project 模式只能禁用项目级服务器经中间层的工具;all 模式可禁用全局 服务器(含 runtime 注入的服务器)经中间层的工具;默认全部启用;
- 工具级禁用独立于服务器级 enabled 开关(服务器级复活不清工具级状态);
- 作用于 mcp-manager 管辖的全部 MCP 工具(mcp__ 前缀直呼与中间层 ws_mcp_* 一致生效,all 模式 runtime 封装工具同样受控);插件侧自行声明的纪律裸名工具 不受影响;
- 超长工具名(>64 字符哈希后缀)不可逆 → 按未知 server 处理,不禁用/不误禁;
- project 模式浮窗显示全局服务器但无工具开关(全局工具此时经 supervisor 直呼, 不经中间层),提示「切 all 模式可管理全局工具」;
- 浮窗与管理面板均按「项目级 / 全局级」两大分组展示(各自内部再按连接状态);
- 全名形态
@@global/或@/(与宿主parseFullServerName归一化一致);宿主重启后projectRoot暂缺时客户端防御性跳过提交(不发送非法@/name,C6);浮窗与管理面板的连接 / 断开 / 重连 / 启停操作携带当前会话 cwd, 宿主重启场景可自愈恢复会话(C7)。