MCP、Hooks 与 LSP
Guide: 安装 · 来源 · 自建资源 · 服务 · 翻译 · 设置 · 工作区
运行时与安全边界
MCP 详情仅为失败的托管服务或残留挂载显示重试;当前后端支持、且该服务不自带 Authorization 请求头时才显示 OAuth 重新授权——自带请求头的服务没有可重新发起的浏览器授权。重试检查所有托管服务但保留凭据,并重建所有存活的 bridge,让「已连接」之后不再响应的服务重新被校验。重新授权需确认清除授权记录及可能中断服务的影响。未保存配置时禁用连接操作;结果以刷新后的状态为准,不将接口成功当作连接成功。缺少凭据时应先补齐凭据。
MCP 配置
在 MCP 服务中配置服务、凭据、覆盖、授权和重试。套件详情仅用于只读预览。
远程服务按需授权:未声明 auth 的服务同样会走 OAuth,且只在服务端挑战连接时触发。服务详情会将这些行标注为授权默认开启。
MCP 增强设置(mcpEnhanced,默认 true)选择内置桥接,支持 stdio、Streamable HTTP / OAuth 和旧式 SSE。关闭后使用宿主客户端兼容后端,该接入方式不提供 OAuth 或 SSE。切换会重新挂载服务。
使用 "env": { "FOO_TOKEN": "${FOO_TOKEN}" } 这样的引用。服务编辑器里的凭据配置分组列出该服务携带的每一项机密——凭据库回答的引用,或文档自带的字面值(它读作已配置且已隐藏,而不是一个可编辑的 [redacted] 字符串)。该分组折叠成一行,写明已配置几项;展开后每个机密连同它的名字、使用它的座位与写入控件一起出现,字面值写回文档。一个机密只有一层折叠。详情弹窗只报告服务,凭据留给编辑器。缺失引用时阻止启动并显示 needs-credentials。宿主凭据只写不读,不会将字面 token 写入套件状态或 override JSON。只读的启动环境值需要修改后重启 DSH。
mcp.json 使用严格 schema 校验,并遵循 agent-plugins 规范的失败边界:违反 schema 的单个服务条目被跳过,文件其余部分继续生效;文件级问题($schema 无法识别或与清单版本不一致)会让该套件的 MCP 整体停用并给出诊断。两个已发布版本都能校验:$schema 可写 1.0.0 或 1.1.0,同一套件的两个文件必须写同一个版本。逐服务器的客户端策略——OAuth 授权、工具允许/拒绝清单、超时策略——写在套件的 com.deepseek.harness 命名空间里,不写进 mcp.json。可移植 mcp.json 里的占位符样式文本保持原样:只有 ${PLUGIN_ROOT} 与 ${PLUGIN_DATA} 会替换,凭据引用应写在 MCP 服务面板或覆盖配置里,挂载时解析。.mcp.json(其它布局)支持常见兼容形式:顶层 server map、http / local transport 别名、省略 type 时通过 command 推断,以及 ${CLAUDE_PLUGIN_ROOT}、${CLAUDE_PLUGIN_DATA}、${NAME:-default} 占位符。无效服务会诊断并跳过,不会带着部分配置启动。
套件文件里写的路径变量会在注入时替换成实际值:${CLAUDE_PLUGIN_ROOT}(及 Codex、ZCode、Qoder 各自的拼写)指向套件 checkout,${CLAUDE_PLUGIN_DATA} 指向该套件的数据目录,${CLAUDE_SKILL_DIR} 指向技能自身目录,${CLAUDE_PROJECT_DIR} 指向当前会话的项目目录。技能正文、斜杠命令、子代理提示、LSP 声明、启动指令与 hook 命令都会替换,hook 子进程还会以环境变量拿到插件根、数据目录与项目目录。项目自带的 .claude/ 等原生目录不算插件,其中的插件路径变量保持原样。
技能正文与斜杠命令里的 !`命令` 属于动态上下文:命令在会话目录中运行,输出替换该占位符;多行命令写成 ```! 代码块。命令失败、超时或被取消会中止整次调用并给出命令输出,不会只注入一半。这意味着启用套件的技能与命令在调用时会执行其自带的 shell 命令,安装前请先检查内容。
Hooks 与 LSP
Hooks 使用桥接映射支持的 command-hook 子集,接入 SessionStart、UserPromptSubmit、PreToolUse、PostToolUse、Stop、SubagentStart、SubagentStop。这不代表完整兼容 Claude Code 运行时。 Hooks 页签中的 hook 行打开一张声明卡:支持情况、事件与匹配条件三个标签压在完整命令之上,下面是概览网格(来源、匹配条件、超时、声明位置、类型、来源套件与运行目录),再下面是一行默认折叠的声明区,展开后以 JSON 显示该声明。被校验拒绝的声明改为显示校验诊断,不显示命令。已接纳的声明提供试运行:命令在用户根目录用合成事件数据运行一次,详情显示退出码与两路输出。
LSP 的启用套件声明和直接配置的服务使用同一挂载生命周期。LSP 支持包随插件自带,用户只需自备语言服务器可执行程序;可执行程序缺失、声明无效,或安装损坏导致 LSP 支持包无法加载,都会展示诊断。能够预览声明不代表服务已经运行。
校验与执行
来源获取和清单扫描不能证明第三方代码可信。安装处于启用状态的套件可能启动服务或注册可执行 hooks,请先检查内容。
Git 获取通过 execFile 执行,不经过 shell;刷新使用 shallow fetch/reset。指向 .sources/ 之外的本地目录源永不删除;.sources/<id> 下的 checkout——无论收编还是自克隆——只在删除该源并勾选「同时删除市场目录」时被移除。压缩包默认仅 HTTPS、256 MiB 上限、受保护的解压,可选 SHA-256 校验。便携路径在解析 symlink 后也必须留在套件根目录。无效清单和挂载失败以诊断形式展示。stdio 服务或语言服务器声明的是一条命令;当它是裸名、而正在运行的宿主找不到时——从访达启动的桌面版 PATH 只有系统目录,npx 就是这种情况——插件会向你的登录 shell 询问它导出的目录,把当前 PATH 缺少的那些追加进去再解析一次。声明的命令不会被改写,显式声明的 env.PATH 原样保留,每次扩展或解析失败都会写进诊断。
漏洞报告请遵循安全政策。