튜토리얼
Google Agent Plugins 2026이란? Skills, MCP Server, Plugin, JSON Schema가 다음 Agent 도구 생태를 어떻게 짜는가
Skill은 썼고 MCP도 通했다. 다음 Coding Agent에서는 또 다른 포장이 필요하다. 2026년에 부족한 것은 도구가 아니다. 함께 여행하는 상자다.
2026년 8월 6일 Google은 Developers Blog에서 Agent Plugins TSC에 합류하고 자사 제품에 이 형식을 얹겠다고 밝혔다. 9월 10일 Google Cloud Developer Plugin이 나온다. 인증, 프로젝트, gcloud 가드레일, Developer Knowledge MCP를 하나의 설치 묶음으로 Antigravity, Claude Code, Codex, Cursor에 준다. “Google이 또 도구 프로토콜을 만들었다”로 듣기 쉽다. 아니다. Agent Skills는 이미 Skill 쓰는 법을, MCP는 이미 도구 호출을 정했다. 빠진 것은 둘을 한 디렉터리에 넣고 클라이언트를 바꿔도 갈라지지 않는 상자다. 상자의 계약은 닫힌 JSON 두 장, plugin.json과 mcp.json. 프로토콜은 MCP란, 입력은 MCP와 JSON Schema. 이 글은 네 층의 조립만 다룬다. Plugin, Skills, MCP Server, JSON Schema. 규격은 Agent Plugins 1.0.0.
또 하나의 MCP 입문이 아니다: Plugin은 상자다
층을 먼저 고정한다. Skill은 모델이 읽는 설명이다. 언제 쓰는지, 어떻게 가는지, 옆에 어떤 스크립트와 참고가 있는지. MCP Server는 런타임이 쓰는 손이다. tools/list가 도구를 드러내고 tools/call이 실행하며 인자는 JSON. Plugin은 둘 다 다시 발명하지 않는다. 루트에 plugin.json이 있어야 한다. Skill은 skills/의 바로 아래 자식만 본다. MCP는 루트 mcp.json만 읽는다. v1이 인정하는 컴포넌트는 이 둘뿐이다. 명령, 하위 Agent, hooks는 com.example.client/ 같은 역도메인으로. 다른 클라이언트는 무시해도 된다.
Google도 공개적으로 말한다. 모든 Skill을 플러그인으로 만들지 마라. MCP 하나, 클라이언트 하나면 네이티브 설정이 더 단순하다. 단독 SKILL.md에는 상자가 필요 없다. Plugin이 값을 갖는 때는 함께 움직여야 하는 조각이 여러 개일 때다. 인보이스를 조회하는 MCP, 결과를 주간 보고로 쓰는 Skill, 세 번째 파일에 두면 안 되는 발견 계약. Cursor, Claude Code, Antigravity를 바꿔도 디렉터리 두 벌과 Manifest 방언 두 벌을 유지하면 안 된다.
규격은 설치, 배포, 권한, 샌드박스, 신뢰를 일부러 빼 둔다. 그건 IDE, CLI, 기업 플랫폼 각자의 의무다. 이식 필드에 구우면 첫날에 갈라진다. Agent Plugins는 패키지 형식일 뿐이다. 발견은 다른 층(Google이 언급한 Agentic Resource Discovery, AI Catalog)에 둘 수 있다. 실행은 여전히 MCP와 Agent Skills. 한 층을 쓴다고 다음 층을 사지 않는다. 한 문장: 상자는 이식 가능하고, 설치 UX는 그럴 필요가 없다.
| 층 | 무엇인가 | 계약은 어디에 |
|---|---|---|
| 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처럼 안 보인다”는 이유만으로 거절하면 안 된다. author는 name / email / url만. 클라이언트 전용은 extensions.com.example.client. hooks용 다섯 번째 최상위 키를 만들지 마라.
Manifest가 못 하는 일을 보라. 컴포넌트 경로를 옮기지 못한다. Skill이나 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
Skill 형식은 Agent Plugins가 다시 쓰지 않는다. Agent Skills가 frontmatter, 본문, scripts/, references/, assets/의 원본이다. Plugins는 발견만 정한다. 고정 위치는 skills/. 바로 아래 자식 디렉터리에 이름이 정확히 SKILL.md인 일반 파일이 있으면 그것이 Skill 하나다. 더 깊이 재귀하면 안 된다. skills/deploy/extra/SKILL.md에 숨긴 두 번째는 보이지 않는다.
한 Skill이 불량이면 그것을 건너뛰고 다른 Skill과 다른 컴포넌트를 계속 올리며, 무엇이 깨졌는지 보고해야 한다. “MCP 하나가 죽으면 패키지 전체가 죽는다”의 반대다. Google의 말은 독립 컴포넌트는 독립적으로 실패한다는 것이다. 주간 보고 Skill이 깨져도 인보이스 MCP는 붙어야 하고, 반대도 같다. Coding Agent에서는 중요하다. 문서 Skill frontmatter 오타 때문에 gcloud 가드레일을 잃으면 안 된다.
Skill이 맡는 것은 맥락이지 전송이 아니다. “먼저 프로젝트를 보고, 그다음 billing, 키를 git에 넣지 마라”고 모델에 말한다. 클라우드 자원을 바꾸는 일은 여전히 MCP 도구나 로컬 스크립트다. 매뉴얼 전체를 시스템 프롬프트에 붙이면 창이 바닥난다. Skill은 필요할 때 올라온다. Cloud Developer Plugin 글이 반복하는 지점이다. Skill을 하나씩 깔면 지저분해진다. 관련 Skill과 MCP는 묶어서 낸다. 플러그인은 그 밧줄이지, 두 번째 Tool Calling이 아니다.
mcp.json: 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만 끄고 Skill은 올린다.
각 server에 명시적 type이 필요하다. 객체 모양으로 전송을 추측하면 안 된다. stdio는 command(실행 파일 토큰 하나, 셸 문자열이 아님)와 선택 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
두 공지를 겹쳐 본다. 8월: TSC 합류(Amazon, Cursor, Microsoft, OpenAI, Vercel은 이미 Core Maintainer). 자사 제품에서 이 형식을 지원하기 시작. 9월: google/skills에 기함 google-cloud-developer 공개. “또 하나의 gcloud 래퍼”가 아니다. 기초 층 플러그인이다. 인증, 프로젝트, gcloud 가드레일, 그리고 Developer Knowledge MCP. 한 해 전 블로그가 아니라 지금 공식 문서에 접지시킨다. 설치는 각 클라이언트의 marketplace / CLI. 키는 환경 변수이지 mcp.json headers가 아니다. 비밀을 이식 계약에서 빼는 규격과 맞다.
같은 생태에 두 줄이 더 있다. Agents CLI는 ADK 뼈대, 평가, 배포, 관측, 공개를 Skill로 묶어 Antigravity, Gemini CLI, Claude Code, Cursor를 “Google Cloud에서 Agent를 만드는” 전문가로 만든다. Data Agent Kit는 BigQuery, Spanner, Cloud SQL 등 데이터 면 Skill과 MCP를 이식 플러그인으로 만든다. 둘 다 예전에도 Skill을 낼 수 있었다. 지금은 Google 전유가 아닌 디렉터리를 쓴다. 당신의 인보이스 플러그인과 Google 클라우드 플러그인은 같은 Schema로 검증된다.
A2A와 섞지 마라. Plugin이 답하는 것은 “이 Agent가 한 묶음의 Skill과 도구를 어떻게 얻는가”. A2A Agent Card가 답하는 것은 “다른 Agent를 어떻게 발견하고 위임하는가”. 상자 안 MCP는 여전히 아래를 향하는 손. 옆 동료는 Agent Card와 Task. 층은 A2A vs MCP. 원격 Agent 전체를 mcp.json의 도구 하나에 넣으면 여러 턴의 확인과 비동기 콜백이 함수 호출 모양을 찢는다.
| Google이 내는 것 | 상자 안 | 어디에 쓰나 |
|---|---|---|
google-cloud-developer | 클라우드 기초 Skill + Developer Knowledge MCP | 호환 클라이언트에 GCP 인증과 문서를 걷게 한다 |
| Agents CLI 플러그인 | ADK 수명주기 Skill (뼈대 / 평가 / 배포) | Coding Agent에게 Cloud에서 Agent 공학을 시킨다 |
| Data Agent Kit | BigQuery, Spanner, Cloud SQL Skill과 MCP | 데이터 파이프라인과 질의를 한 IDE에 가두지 않는다 |
JSONVue로 두 계약을 본다
배포 전에 픽스처 네 개를 남긴다. 합법 plugin.json, 최상위 필드를 하나 더한 Manifest, 합법 mcp.json, command가 ../bin/escape인 불법 항목. 첫 번째는 공식 Schema를 통과해야 한다. 두 번째는 보고하고 무시하며 플러그인은 올라간다. CI가 그걸 치명으로 치면 클라이언트보다 엄하다. 스스로 알라. 세 번째는 type과 경로. 네 번째는 반드시 실패한다. 플러그인 루트를 탈출하는 상대 경로는 단단한 오류다.
하나 더 남긴다. 도구 inputSchema와 실제 tools/call arguments. 포장 계약이 초록이어도 모델이 날짜를 맞게 채웠다는 뜻은 아니다. 두 Schema를 “범용 검증” 한 파일에 넣지 마라. 하나는 발견, 하나는 호출. Developer Knowledge MCP의 API 키는 클라이언트 런타임 이야기다. 저장소에서 보는 것은 비밀 없는 mcp.json.
브라우저면 된다.JSON 포맷으로 두 Manifest가 parse되는지 보고,JSON Schema 검증으로 $schema, name, mcpServers를 보고,JSON Diff로 저장소 mcp.json과 클라이언트 네이티브보내기를 비교한다. 데이터는 이 기기를 떠나지 않는다. 이어서MCP와 JSON Schema, MCP란, A2A와 MCP의 분업.
관련: MCP란, MCP와 JSON Schema, A2A vs MCP, AI Agent란.
자주 묻는 질문 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 원문대로 단일 Skill, 단일 MCP, 단일 클라이언트는 네이티브 설치가 더 단순하다. 함께 배포해야 할 것이 둘 이상일 때—숫자를 조회하는 MCP와 주간 보고를 쓰는 Skill—상자에 넣는다. 너무 이른 포장은 유지할 Manifest만 늘린다.
plugin.json과 Gemini CLI의 gemini-extension.json은 같은가?
아니다. Gemini CLI는 여전히 자체 확장 Manifest를 갖고 MCP를 gemini-extension.json에 넣을 수 있다. Agent Plugins는 MCP를 루트 mcp.json으로 보내고 Manifest는 닫혀 있으며 컴포넌트를 인라인할 수 없다. 클라이언트가 이식 형식을 네이티브 설정으로 옮긴다. JSONVue에서 두 파일을 Diff하는 편이 필드 별명을 짐작하는 것보다 drift가 적다.
plugin.json 검증이 inputSchema 검증을 대신하나?
못 한다. Manifest Schema는 “이 패키지를 발견할 수 있는가”만 답한다. 도구 Schema는 “이 hop의 arguments가 합법인가”를 답한다. 전자가 통과해도 startDate는 빠질 수 있다. 계약 둘, 검증 두 번. “일단 parse” 헬퍼를 공유하지 마라.
요약과 다음 단계
2026년 Google Agent Plugins는 한 문장으로 접힌다. 이미 이식 가능한 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 글.