Claude Code 与 Cursor 的插件体系对照:分发、依赖与启用前置
把一套规则、技能和 MCP 配置打包发给团队,真正卡人的不是”谁的组件种类多”,而是两件事:这个包从哪里取,取回来之后还差几步才真正生效。前者决定 CI 机器、内网环境、没装 git 的同事能不能装上;后者决定你发出去之后是所有人自动就有了,还是躺在列表里没人打开。
这篇只对照这两件事,且只对照两边官方文档都白纸黑字写了的部分。两个都是闭源商业产品,我们没有源码,也没有对文中任何一处做过实测,所以不推断实现,也不排名。
第一岔路:这个插件从哪里取
Claude Code 的分发入口是 marketplace,而 marketplace 里每一条插件条目自己还有一个 source 字段。官方文档 code.claude.com/docs/en/plugin-marketplaces 的「Plugin sources」一节把这两层分得很清楚:marketplace source 决定去哪里取 marketplace.json 这份目录本身,plugin source 决定去哪里取目录里列出的某一个插件,两者可以指向不同仓库、各自独立打钉子。这是后面很多困惑的根源——目录仓库钉在某个 tag 上,不等于目录里的插件也被钉住了。
该页的 source 类型表列了七类:仓库内相对路径、github、url(git URL)、git-subdir(稀疏克隆 monorepo 子目录)、npm、archive(HTTPS 下载 zip)、command(跑一条本机命令,命令打印插件目录的绝对路径)。其中两类有明确版本前置,文档逐字写了:archive 要求 Claude Code v2.1.224 或更新,command 要求 v2.1.229 或更新;版本不够时报 This plugin uses a source type your Claude Code version does not support. Update Claude Code and try again.,更老的版本会直接整份 marketplace 加载失败。
{
"name": "my-plugin",
"source": {
"source": "archive",
"url": "https://artifacts.example.com/claude-plugins/my-plugin-2.1.0.zip",
"sha256": "6bfa50e3d2e00c052b46abe51fff89346ac803e45771f76dcf6df1ab74cca5e1"
}
}
archive 这一类的意义文档自己说了:装机上没有 git、没有 npm 也能装。sha256 是可选字段,配了之后每次下载都会校验,对不上就拒绝安装并报 Plugin archive integrity check failed。文档同时写明 url 只接受 HTTPS,http:// 以及回环、链路本地、云元数据地址一律拒绝,每一跳重定向都要满足同样的规则。
Cursor 这一侧,官方文档 cursor.com/docs/plugins 写明 marketplace 插件”以 Git 仓库分发”、通过 Cursor 团队提交上架;团队 marketplace 从 GitHub 仓库导入(文档写明的操作是 Dashboard → Plugins → Add Marketplace,可从零创建,也可用 “Import from Repo”)。也就是说 Cursor 文档里能核到的分发载体只有 Git 仓库这一条路。npm 包、zip 包、由本机命令临时生成插件目录这几类源,我们在 Cursor 的文档里没有找到对应说明,不比。
这个差异什么时候会咬到你:目标环境是一台连不上 GitHub、只有内部制品库的构建机时,Claude Code 侧的 archive 是文档里能核到的路,Cursor 侧我们只能说文档写的是 Git 仓库分发。反过来,如果团队本来就全走 GitHub,这一岔路对你没有影响,别为它做决策。
第二岔路:装上之后默认是开是关
这是两边差别最结构化的一处。
Cursor 把开关做在分发端。官方文档写明,团队 marketplace 先设定 Marketplace Access(可以限定给选中的 Organization Groups,成员关系可以经 SCIM 从身份提供商同步),然后针对这个受众逐个插件选择分发模式,一共三档:
| 模式 | Cursor 官方文档写明的行为 |
|---|---|
| Default Off | 开发者能找到它,自己决定装不装 |
| Default On | 默认装上,但开发者可以选择退出 |
| Required | 始终安装,且不能卸载 |
Claude Code 把开关做在清单字段与设置优先级链上。官方文档 code.claude.com/docs/en/plugins-reference 写明,plugin.json 里可以设 defaultEnabled: false,让插件装完处于禁用态,由用户用 claude plugin enable <plugin> 或 /plugin 打开;这个字段要求 v2.1.154 或更新,更早的版本会忽略它并在安装时直接启用。文档同时写明两样东西优先于它:一是用户在任意作用域的 enabledPlugins 条目,一旦写下就跨更新与重装保留,所以你在后续版本里改 defaultEnabled 不会翻转已有用户;二是依赖关系——当一个激活中的插件要求它时,会在安装或启用时替它写入 true。marketplace 条目里也可以出现同名字段,且优先于 plugin.json 的值。
对应到”强制”这一档:Claude Code 文档在讲 --plugin-dir 时提到,被 managed settings 强制启用或强制禁用的插件,--plugin-dir 无法覆盖。这与 Cursor 的 Required 不是同一个东西,具体到”能不能卸载”的措辞,两边文档口径并不对应,不做等同。
决策路径很直接:“发下去就得有、谁也别关掉”,Cursor 的 Required 是文档里逐字写明的档位;“发下去先别打扰人,用的人自己开”,Claude Code 的 defaultEnabled: false 是逐字写明的做法,文档还给了适用场景自述——用于会带来额外成本或额外访问范围的插件,比如要连外部服务的那种。
第三岔路:启用前置——用户还得再做点什么
“装上了”和”能用了”之间,两边都留了一层,而且都写在文档里。
Claude Code 侧最实的一处是 userConfig。它声明的是启用时向用户索取的值,官方文档给的例子是 API 端点与 API token:
{
"userConfig": {
"api_token": {
"type": "string",
"title": "API token",
"description": "API authentication token",
"sensitive": true
}
}
}
文档写明 type 只能是 string、number、boolean、directory、file 之一;标了 sensitive 的值会被遮蔽输入,并存进安全存储而不是 settings.json(macOS 上是钥匙串,没有受支持钥匙串的平台落到 ~/.claude/.credentials.json)。值可用 ${user_config.KEY} 在 MCP、LSP 配置与 hook 命令里替换,也会以 CLAUDE_PLUGIN_OPTION_<KEY> 导出到 hook 进程的环境变量。
这里有两条容易踩的口径,文档都自述了理由:会进 shell 的字段拒绝 ${user_config.*} 替换,因为把配置值拼进 shell 命令等于让 shell 执行这个值的内容,组件会直接报错,改用 hook 的 exec 形式配 args 或从环境变量读;另一条是 pluginConfigs 只从用户设置、--settings、managed settings 三处读,项目里的 .claude/settings.json 与 settings.local.json 一律忽略,理由写的是这两个文件在工作区里、克隆来的仓库可以往里塞值。这条限制只针对 pluginConfigs,enabledPlugins 仍然认项目与本地设置。
另一层前置是信任。官方文档写明,放在项目 .claude/skills/ 下的 skills 目录插件,只有接受了那个目录的工作区信任对话框之后才加载,信任父目录不算,用 -p 跑也不算;它声明的 MCP server 要走与项目 .mcp.json 相同的逐个审批,LSP server 要信任工作区后才启动,后台 monitor 干脆不加载。放在 ~/.claude/skills/ 的个人作用域插件没有这些限制。
Cursor 侧能对上的是这一条:官方文档在讲 Default 团队 marketplace 时写明,把一个 Team MCP server 加进去并不等于替每个开发者安装或启用它,管理员仍然控制 marketplace 访问权与安装模式,而且每个开发者可能还需要单独与 MCP provider 完成认证。这与 Claude Code 的”逐个 MCP 审批”不是同一个机制,但你要处理的现实一样:分发到位不等于凭证到位,上线清单里得单独留一行给”每个人自己认证”。
至于 Cursor 有没有”启用时弹出表单让用户填配置项”这样的机制,我们在 Cursor 的文档里没有找到对应说明,不比。
第四岔路:还没发布之前,怎么在本机试
Claude Code 用启动参数。文档写明 claude --plugin-dir ./my-plugin 直接加载一个目录,也接受插件目录的 .zip,重复写多次可一次加载多个;与已安装插件同名时,本会话内本地副本优先,不必先卸载线上那份。另有 --plugin-url 从 URL 拉 zip,文档写明只对当前会话生效,拉不到或包无效时会照常启动并把加载错误记到 /plugin 管理器的 Errors 标签页。改完文件用 /reload-plugins 生效,不必重启。
claude --plugin-dir ./plugin-one --plugin-dir ./plugin-two
Cursor 用固定目录。官方文档写明把插件放进 ~/.cursor/plugins/local/<插件名>,两种清单格式都能从这里加载,然后重启 Cursor 或执行 Developer: Reload Window(这是官方文档写明的命令名)。文档给的加速做法是把插件仓库软链进去:
ln -s /path/to/my-plugin ~/.cursor/plugins/local/my-plugin
Windows 侧要单独说一句:上面这条 ln -s 是官方文档原文给出的写法,Cursor 文档在这一节没有给出 Windows 的等价做法,我们也不替它推断。Claude Code 侧的 Windows 差异倒是文档里写明了几处:command 源的命令在 Windows 上通过 cmd.exe 执行(macOS 与 Linux 上是 sh),一律从用户主目录起跑;命令打印出的路径若是 UNC 路径会被拒绝;"mode": "link" 这一档在 Windows 上不被支持,文档写明会拒绝安装,让你改用 "mode": "copy"。容器场景下预置插件用的 CLAUDE_CODE_PLUGIN_SEED_DIR,多路径分隔符在 Windows 上是 ;、Unix 上是 :。
以上命令与配置片段均原样抄自官方文档,组合使用时为按官方文档中的参数语义组合的示例,未经实测,以官方文档与 --help 的实际输出为准。
第五岔路:管理员能把口子收到多紧
Claude Code 收在本机的 managed settings 上。文档写明用 strictKnownMarketplaces 限制用户能添加哪些 marketplace,取值有三种行为:未定义时不限制;空数组 [] 是完全封锁,连官方 marketplace 也一起挡掉;给一个来源列表则按允许列表执行。同一页还写了配套项:disableSideloadFlags 拒绝单次运行里旁加载插件、agent 与 MCP 的那些 CLI 参数,disableCommandPluginSources 单独封掉 command 源。这里有一条反直觉的地方文档说得很明白:strictKnownMarketplaces 匹配的是插件来自哪个 marketplace,不是 marketplace 里的条目,所以用户仍然可以从一个被允许的 marketplace 里装走带 command 源的插件——要封那个得单独设项。文档另写明,组织若设了 allowManagedHooksOnly,command 源默认就是被挡住的。
Cursor 收在服务端的 marketplace 受众与上架审核上。官方文档写明团队 marketplace 属于 Teams 与 Enterprise 计划,Enterprise 计划上只有管理员能从 Dashboard → Plugins 添加;受众用 Marketplace Access 限定到 Organization Groups。上架侧文档写明官方 marketplace 的每个插件都经人工审核、必须开源,每次更新重新审核。
分界很清楚:Claude Code 的限制发生在本机读设置的时候,Cursor 的限制发生在目录服务决定给谁看的时候。合规要求是”离线机器上也不能装名单外的东西”,前者是能核到的抓手;是”内部插件只发给某几个组”,后者是。两者不构成替代关系。
把这几条拧成一条决策路径
- 目标机器上没有 git 或 npm,或者只允许走内部制品库 → 先看 Claude Code 的
archive源,并核对你的版本是否满足 v2.1.224;Cursor 侧这条我们没有依据。 - 需要”发下去所有人必须有、不许关” → Cursor 的 Required 分发模式是文档写明的档位;Claude Code 侧只能核到 managed settings 的强制启用/禁用,措辞不完全对应。
- 插件需要用户填 token 或端点才能跑 → Claude Code 的
userConfig是文档写明的机制,注意sensitive的落盘位置与”shell 字段拒绝替换”这条限制;Cursor 侧我们没有找到对应说明。 - 插件是团队仓库里的项目级配置 → 记住 Claude Code 的信任门:项目作用域 skills 目录插件要过工作区信任对话框,MCP 逐个审批,LSP 要信任后才起,后台 monitor 不加载。
- 只是一个人试着写 → 两边都有零成本的本地路径:
--plugin-dir与~/.cursor/plugins/local,都不需要先上架。
最后提醒一句版本口径:Claude Code 文档把 experimental.themes 与 experimental.monitors 明确标为 experimental,声明其清单 schema 可能在版本之间变化,这类组件别当成稳定能力写进团队规范。两个产品迭代都频繁、文档滞后是常态,涉及命令、字段名与默认值时以官方文档最新内容为准。
本文依据 Claude Code 官方文档(code.claude.com/docs)于 2026-08-17 的公开内容整理。
该产品闭源,本文只复述官方文档写明的机制,不推断其内部实现;
我们没有对文中涉及的功能做过实测,因此不涉及界面外观、操作手感与运行速度的任何描述。
该产品迭代频繁,文中涉及的命令、配置项与默认值随版本变动,请以官方文档最新内容为准。
本文不涉及价格、额度与限流的具体数值,相关信息请以官方定价与用量说明页为准。
本文涉及的另一方内容依据其官方文档整理(Cursor:cursor.com/docs 与 cursor.com/help)。
双方均为闭源商业产品,本文只对照各方公开写明的机制,不推断实现,也不对产品做优劣排名。
安全与合规相关做法请结合自身环境评估,本文不构成安全方案建议。