dsh-mcp-workspace-scope:按目录限制 DeepSeek Harness 的 MCP 工具注入

前言

在 DeepSeek Harness(DSH)中,MCP 客户端是以进程全局的方式注册工具的。这意味着 @deepseek-ai/dsh-mcp-client 会将所有 MCP 服务器的工具列表注入到 ctx.tools,并以 mcp__<serverName>__<toolName> 的形式存在。因此,即使一个会话仅用于处理 Jira 任务,它也可能携带了三个数据库服务器和一个浏览器驱动,不仅占用了上下文窗口,还可能被误调用。

dsh-mcp-workspace-scope 插件通过目录维度对 MCP 工具注入进行限制。它允许你定义一个目录白名单,子目录自动继承该规则,同时提供会话级别的临时开关,在规则之外按需启用服务。

插件简介

  • 名称: dsh-mcp-workspace-scope
  • 维护者: felix-lj-ct
  • 类别: admin-security
  • 许可: MIT

该插件通过隐藏工具和拒绝调用两种机制,在保持 MCP 服务运行的同时,为每个项目提供清晰的工具边界。

核心功能

  • 目录级白名单: 定义每个目录允许使用的 MCP 服务器列表,子目录自动继承父级规则。
  • 双重拒绝机制: 不仅隐藏工具,还在调用时进行拒绝(guard),提供硬性边界。
  • 会话级临时开关: 在 Composer 中提供 Pill 组件,允许在当前会话中临时启用或禁用特定服务器。
  • 状态诚实读出: 显示服务器的运行时状态,能够识别“已允许但已死”的服务器。
  • 可视化编辑器: 提供设置页面的规则编辑器,支持从已知工作区下拉选择。

安装与启用

安装插件需要指定 profile(例如 web)。安装后需要重启 profile 才能生效。

dsh plugin --profile web add dsh-mcp-workspace-scope

重启 profile:

dsh --profile web

安装后,插件会在 profile 的 cordis.patch.yml 中挂载 Host 层。默认配置文件路径为 ~/.dsh/mcp-workspace-scope.json。若不存在该文件,插件将不生效,所有会话仍将注入所有 MCP 服务器。

规则配置

规则文件采用 JSON 格式,包含 default 和 rules 两个顶层字段。

  • default: 控制未匹配到任何规则的目录(即根目录或未被显式覆盖的路径)的行为。可以是 "*"(注入全部)、[](注入全部禁用)或一个服务器名称数组。
  • rules: 数组,每一项包含 path(目录)和 servers(允许的服务器列表)。

配置示例 (~/.dsh/mcp-workspace-scope.json)

{
  "default": "*",
  "rules": [
    {
      "path": "D:/work/frontend",
      "servers": ["playwright", "context7"]
    },
    {
      "path": "D:/work/master-data-management",
      "servers": ["atlassian", "bigquery"]
    }
  ]
}

匹配规则

  • 子目录继承父目录规则。
  • 采用最长路径匹配优先原则。
  • 相同长度的规则中,后定义的优先。
  • 规则修改会立即应用于正在运行会话(可通过配置 applyToRunningSessions 冻结此行为)。

使用与交互

  1. 启用/禁用: 在 Composer 中,会话旁边会出现 MCP Scope Pill。点击 Pill 可以在当前会话中临时启用或禁用特定服务器,无需修改全局规则。
  2. UI 编辑: 在设置页面的 “MCP scope” 区域,可以直接通过 UI 编辑器添加规则、选择目录和服务器。

限制与注意

  • 不可凭空启用: 该插件仅支持“减法”操作,不能启用在 profile 中已被禁用的服务器。
  • 内存占用: 被隐藏的服务器仍在运行并占用内存。若需完全停止服务,应将其移至 Agent Preset。
  • 子代理隔离: 子代理的范围由其自身的工作目录决定,不继承父代理的限制。
  • 运行时重载: 规则变更(无论是通过 UI 保存还是直接编辑文件)会立即重新计算并应用于当前会话。

总结

dsh-mcp-workspace-scope 解决了 DSH 环境中 MCP 工具污染上下文的问题。它通过目录继承和会话级开关,帮助开发者构建更干净的上下文边界。

  • GitHub 仓库: https://github.com/felix-lj-ct/dsh-mcp-workspace-scope
  • 插件目录: https://www.skillhub.cn/plugins/felix-lj-ct/dsh-mcp-workspace-scope
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜