教程
Google Agent Plugins 2026 是什么?Skills、MCP Server、Plugin 与 JSON Schema 如何组成下一代 AI Agent 工具生态?
技能写好了,MCP 也通了,换一个 Coding Agent 却要再包一层。2026 年真正缺的不是工具,是能一起走的箱子。
2026 年 8 月 6 日,Google 在 Developers Blog 宣布加入 Agent Plugins 技术指导委员会,并把自家产品接到这份开放规范。9 月 10 日,Google Cloud Developer Plugin 上线:把认证、项目、gcloud 护栏和 Developer Knowledge MCP 打成一份可安装包,给 Antigravity、Claude Code、Codex、Cursor 用。很多人把它听成「Google 又发明了一套工具协议」。不是。Agent Skills 已经规定技能怎么写,MCP 已经规定工具怎么调。缺的是把两者装进同一个目录、换客户端也不用分叉的箱子。箱子的合同是两份闭集 JSON:plugin.json 与 mcp.json。站内 MCP 是什么 讲协议本身,MCP 与 JSON Schema 讲 inputSchema。本文只讲四层怎么拼:Plugin、Skills、MCP Server、JSON Schema。规范原文见 Agent Plugins 1.0.0。
不是又一个 MCP 教程:Plugin 是箱子
先把层次钉死。Skill 是给模型看的说明书:何时用、怎么走、旁边有哪些脚本和参考。MCP Server 是给运行时看的手:tools/list 暴露工具,tools/call 执行,参数是 JSON。Plugin 两样都不重新发明。它规定:根目录必须有 plugin.json;技能只从 skills/ 的直接子目录发现;MCP 只从根上的 mcp.json 读。v1 只承认这两种组件。命令、子 Agent、hooks 若要带上,放进反向域名目录,比如 com.example.client/——别的客户端可以无视。
Google 自己也写明:不是每个技能都该升级成插件。只发一台 MCP、只给一个客户端,继续用客户端原生配置更简单。单份 SKILL.md 也不需要箱子。Plugin 值钱的时候,是几样东西必须一起走:查询发票的 MCP,加上把结果写成周报的 Skill,再加上一份不能写进另一份文件的发现合同。换 Cursor、Claude Code 或 Antigravity,你不该再维护两套目录布局和两套 Manifest 方言。
规范故意不管安装、分发、权限、沙箱和信任。那些是 IDE、CLI 和企业平台各自的义务,硬写成可移植字段只会立刻分叉。Agent Plugins 只做包装格式。发现可以走别的层(Google 提到的 Agentic Resource Discovery、AI Catalog),执行仍走 MCP 与 Agent Skills。采用其中一层,并不强迫你买下一层。记住这句:箱子可移植,安装体验不必可移植。
| 一层 | 它是什么 | 合同在哪 |
|---|---|---|
| Plugin | 可分发目录:把该一起走的组件打成一包 | plugin.json(闭集字段) |
| Skill | 可复用的工作流说明、脚本与参考资料 | skills/<name>/SKILL.md |
| MCP Server | 工具、资源的运行时与传输 | 根目录 mcp.json + MCP 协议 |
| JSON Schema | Manifest、MCP 配置、工具入参的形状说明书 | 官方 plugin.schema.json / mcp.schema.json,以及 inputSchema |
plugin.json:闭集 Manifest 与 JSON Schema
客户端必须先读根上的 plugin.json,再发现组件。它必须是 JSON 对象,且 Schema 是闭集:只允许 $schema、name、version、description、author、homepage、repository、license、keywords、extensions。多出来的顶层字段,客户端必须报告并忽略,但不能因此拒绝插件。真正致命的是缺必填、类型错、或 name 违规——那种情况整包不加载。1.0.0 的 $schema 必须是 https://agent-plugins.org/schemas/1.0.0/plugin.schema.json。客户端用它选本地校验规则,加载时不得去网上拉 Schema。
name 不是随便起的展示名。长度 1–64,只能小写字母、数字、连字符和点,首尾必须是字母或数字,禁止 -- 和 ..。My-Plugin、-start 都不合法。版本推荐 SemVer,但客户端不能只因为版本字符串「看起来不像 SemVer」就拒载。作者对象只允许 name / email / url。客户端私货放 extensions.com.example.client,不要发明第五个顶层键去塞 hooks。
注意 Manifest 不能做的事:不能改组件路径,不能把技能或 MCP 内联进来。没有「发现路径」可配,也没有优先级可学。有 skills/ 就加载技能;没有就跳过,不算错误。下面是一份比「只有 name」稍完整、但仍合法的 Manifest。先确认能 parse,再按官方 Schema 核字段。
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "reports-plugin",
"version": "1.0.0",
"description": "Query invoices and write the weekly finance summary",
"license": "Apache-2.0",
"keywords": ["finance", "reports", "mcp"],
"homepage": "https://example.com/plugins/reports",
"repository": "https://github.com/example/reports-plugin"
}
Skills:固定目录里的 SKILL.md
技能格式不由 Agent Plugins 重写,而以 Agent Skills 规范为准:frontmatter、正文、以及 scripts/、references/、assets/。Plugins 只规定怎么发现。固定位置是 skills/。每个直接子目录里有一份名为恰好 SKILL.md 的普通文件,算一项技能。客户端不得往更深层递归找技能——你把第二份技能藏在 skills/deploy/extra/SKILL.md,它不会被看见。
某一项技能不合格,客户端必须跳过它,继续加载其他技能和其他组件类型,并应报告哪一项坏了。这和「一个 MCP 起不来就整包作废」相反。Google 的判断是:独立组件独立失败。周报 Skill 坏了,发票 MCP 仍该能连;反过来也一样。这对 Coding Agent 很重要:你不会因为文档技能的 frontmatter 写错,就失去 gcloud 护栏。
Skill 解决的是上下文,不是传输。它告诉模型「先核项目、再谈 billing、不要把密钥提交进 git」;真正改云资源的,仍是 MCP 工具或本地脚本。把整本手册糊进系统提示,窗口会被吃光。Skill 按需加载,正是 Google Cloud 那篇 Developer Plugin 文强调的:单独装技能很快变乱,相关技能和 MCP 该捆在一起。插件是那根绳子,不是另一套 Tool Calling。
mcp.json:MCP Server 怎么被发现,JSON Schema 管哪一层
MCP 的线协议仍是 MCP 自己的事:初始化、tools/list、tools/call、无状态 HTTP。Agent Plugins 只规定到哪去连。配置必须在根目录 mcp.json,不得写进 plugin.json,也不得换一个核心路径。文件顶层只能有 $schema 和 mcpServers。1.0.0 的 $schema 必须是 https://agent-plugins.org/schemas/1.0.0/mcp.schema.json,且必须和 Manifest 声明的规范版本一致;对不上,只停用该插件的 MCP,技能继续加载。
每个 server 必须带显式 type。客户端不得从对象长什么样去猜传输。stdio 要 command(单个可执行文件 token,不是 shell 字符串)加可选的 args / env / cwd;插件内可执行文件必须用 ./ 开头的相对路径。streamable-http 与可选的遗留 sse 要绝对 URL。非回环地址必须 HTTPS。规范明确:headers 里不要塞密钥;OAuth 与凭据是客户端的事,不是可移植字段。某一条 server 无效、传输不支持、握手失败,都只跳过那一条。
JSON Schema 在这里出现三次,别揉成一份文件。第一份是包装合同:plugin.schema.json 与 mcp.schema.json,管插件能不能被发现。第二份是工具入参:MCP inputSchema,管模型吐出的 arguments 像不像。第三份才是你业务 API 的 OpenAPI / 结构化输出。第一份坏了,客户端进不了箱子;第二份坏了,tools/call 会在运行时被拒。校验链见上文 MCP Schema 文。下面是一份同时带本地 stdio 和远程 Streamable HTTP 的 mcp.json。
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
"mcpServers": {
"invoice-tools": {
"type": "stdio",
"command": "./bin/invoice-mcp",
"args": ["--data", "${PLUGIN_DATA}/invoices"],
"cwd": "${PLUGIN_ROOT}"
},
"docs": {
"type": "streamable-http",
"url": "https://docs.example.com/mcp"
}
}
}
{
"name": "searchInvoices",
"description": "Query invoices by date range and status",
"inputSchema": {
"type": "object",
"properties": {
"startDate": { "type": "string", "format": "date" },
"endDate": { "type": "string", "format": "date" },
"status": { "type": "string", "enum": ["draft", "sent", "paid"] }
},
"required": ["startDate", "endDate"]
}
}
Google 2026 在发什么:Developer Plugin、Agents CLI、Data Agent Kit
把 Google 的两则公告叠在一起看。8 月:加入 TSC(Amazon、Cursor、Microsoft、OpenAI、Vercel 已是 Core Maintainer),并开始在自有产品里支持这份格式。9 月:在 google/skills 发布旗舰包 google-cloud-developer。它不是「又一个 gcloud 封装」,而是基础层插件:认证与授权、项目、gcloud 操作护栏,外加 Developer Knowledge MCP,让 Agent 能接地官方文档,而不是背一年前的博客。安装走各客户端的 marketplace / CLI,密钥用环境变量,不写进 mcp.json 的 headers——这正好符合规范把密钥排除在可移植合同之外。
同一生态里还有两条线。Agents CLI 把 ADK 的搭建、评测、部署、可观测、发布打成技能包,让 Antigravity、Gemini CLI、Claude Code、Cursor 在「如何在 Google Cloud 上做 Agent」这件事上变专家。Data Agent Kit 则把 BigQuery、Spanner、Cloud SQL 等数据面的技能和 MCP 收成可移植插件。两边以前都能发技能;现在用的是不属于 Google 私有的目录布局。你写的发票插件,和 Google 的云插件,走同一份 Schema。
和 A2A 不要混。Plugin 解决的是「同一个 Agent 如何获得一组技能和工具」;A2A Agent Card 解决的是「另一个 Agent 如何被发现、被委托」。箱子里的 MCP 仍是向下的手;横向同事仍是 Agent Card 与 Task。分层见 A2A vs MCP。若有人把整颗远程 Agent 塞进 mcp.json 当一个 tool,多轮澄清和异步回调会立刻撑破函数调用的形状。
| Google 在发的东西 | 箱子里有什么 | 你用它做什么 |
|---|---|---|
google-cloud-developer | 云基础技能 + Developer Knowledge MCP | 让任意兼容客户端会走 GCP 认证与文档 |
| Agents CLI 插件 | ADK 生命周期技能(搭建 / 评测 / 部署) | 让 Coding Agent 会在 Cloud 上做 Agent 工程 |
| Data Agent Kit | BigQuery、Spanner、Cloud SQL 等数据面技能与 MCP | 让数据管道和查询跟着 Agent 走,而不是锁在一个 IDE |
落地校验:用 JSONVue 核两份契约
发布插件之前,至少留四份夹具:合法 plugin.json、故意多一个顶层字段的 Manifest、合法 mcp.json、command 写成 ../bin/escape 的非法项。第一份必须通过官方 Schema。第二份按规范应被报告并忽略多余字段,插件仍加载——你的 CI 若把它当致命错误,比客户端更严,要自己知道。第三份核 type 与路径。第四份必须失败:相对路径逃出插件根是硬错误。
再留一份工具 inputSchema,和一次真实的 tools/call arguments。包装合同过了,不代表模型填对了日期格式。两份 Schema 不要写进同一个文件做「通用校验」:一份管发现,一份管调用。Google 的 Developer Knowledge MCP 用 API Key,那是客户端运行时的事;你在仓库里校验的是不含密钥的 mcp.json。
浏览器里即可完成:JSON 格式化看两份 Manifest 能否 parse;JSON Schema 校验核 $schema、name、mcpServers;JSON Diff对比「仓库里的 mcp.json」和客户端原生配置导出;数据不离开本机。延伸阅读:MCP 与 JSON Schema、MCP 是什么、以及 A2A 与 MCP 的分工。
常见问题 FAQ
Agent Plugins 是 Google 的专有格式吗?
不是。1.0.0 由开放 TSC 发布,Core Maintainer 包括 Amazon、Cursor、Microsoft、OpenAI、Vercel;Google 在 2026 年 8 月加入。Google Cloud Developer Plugin 是遵守该规范的一份包,不是规范本身。你的插件不必托管在 google/skills 才能叫 Agent Plugin。
只有一个 Skill,要不要做成 Plugin?
通常不要。Google 原文写过:单技能、单 MCP、单客户端,用原生安装更简单。当你有两样以上必须一起分发——例如「查数的 MCP + 写周报的 Skill」——再装箱。过早装箱只会多一份 Manifest 要维护。
plugin.json 和 Gemini CLI 的 gemini-extension.json 是一回事吗?
不是。Gemini CLI 仍有自己的扩展清单,MCP 可以写在 gemini-extension.json 里。Agent Plugins 把 MCP 赶到根上的 mcp.json,Manifest 闭集且不能内联组件。客户端负责把可移植格式映射成自己的原生配置。在 JSONVue 里对比两份文件,比猜测字段别名更不容易 drift。
校验 plugin.json 能不能代替校验 inputSchema?
不能。Manifest Schema 只回答「这包能不能被发现」。工具入参 Schema 回答「这一跳 arguments 合不合法」。前者过了,后者仍可能缺 startDate。两份合同,两次校验;不要共用一个「随便 parse」的函数。
总结与下一步
Google Agent Plugins 在 2026 年可以收成一句:开放包装格式,把已经可移植的 Skills 与 MCP Server 放进固定目录;Google 用它来发 Cloud Developer Plugin、Agents CLI 和 Data Agent Kit,而不是再发明第四种工具协议。
落地顺序:先让 plugin.json 能 parse、name 合法、$schema 钉在 1.0.0;再决定要不要 skills/ 和 mcp.json;然后用官方 Schema 核包装合同,用另一份 Schema 核工具入参。用 JSONVue 把夹具留在本地。协议细节读 MCP 文;跨 Agent 委托读 A2A 文。