A set of skills plus an MCP server used to need a separate package for every client. Agent Plugins standardizes the package layer: one plugin.json, one skills/, one mcp.json. Below: the spec itself, the official marketplace, install steps for five launch clients, and how it differs from Claude Code's own format.
Agent Skills standardized what one skill looks like. MCP standardized how to connect a tool server. But bundling them into one installable package was different in every client: Claude Code uses .claude-plugin/plugin.json, Cursor uses .cursor-plugin/plugin.json, Kiro calls it a power. According to the GitHub Changelog (2026-08-12), Agent Plugins 1.0 was published on 2026-08-06 with AWS, Anysphere (Cursor), Microsoft, OpenAI and Vercel as founding partners. The five Core Maintainers listed in the spec repo's MAINTAINERS file come from exactly those five companies.
1. The spec: agentplugins/agent-plugins-spec (about 1.4k stars per the GitHub repo page, read 2026-10). spec/1.0.0.md is the normative text and schemas/1.0.0/ holds the two JSON Schemas; 1.1.0 is still a working draft. The smallest plugin:
hello-plugin/
├── plugin.json
└── skills/greet/SKILL.md
# plugin.json: only $schema and name are required
{ "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "hello-plugin" }
Install steps for the launch clients (all from each vendor's official docs, searched 2026-10):
Chat: Install Plugin From Source from the Command Palette and paste a Git repo URL. The copilot-plugins and awesome-copilot marketplaces are wired in by default; add others with chat.plugins.marketplaces.copilot plugin install <plugin-name>@awesome-copilot; on older versions first run copilot plugin marketplace add github/awesome-copilot. You can also list it under enabledPlugins in settings.codex plugin marketplace add owner/repo to add a marketplace, codex plugin add <plugin>@<marketplace> to install; /plugins lists them interactively.plugin.json (Agent Plugins) and .cursor-plugin/plugin.json (Cursor's own). For local testing drop the folder into ~/.cursor/plugins/local/ and Reload Window; marketplace plugins install with /add-plugin.plugin.json and the older POWER.md work. MCP servers inside the plugin are managed by Kiro, not written into your ~/.kiro/settings/mcp.json, and switch on and off with the power..claude-plugin/plugin.json and .mcp.json. If Claude Code is your only client, there is no reason to change formats today.Skills are found only as SKILL.md in the immediate children of skills/; the spec explicitly forbids recursive search. Each skill follows the Agent Skills spec, and a non-conforming one is skipped while the rest of the plugin loads. MCP is read only from the root mcp.json, never from plugin.json.
Every server must state its type: stdio, streamable-http or legacy sse; one extra field makes that entry invalid. The Design Decisions section explains why: existing clients use incompatible MCP config shapes and infer transports differently. A client only needs to support one of stdio or streamable-http and skips entries it can't run.
{ "$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
"mcpServers": {
"lint": { "type": "stdio", "command": "./bin/lint-server",
"args": ["--cache", "${PLUGIN_DATA}/cache"] } } }
Only two placeholders expand: ${PLUGIN_ROOT} (the plugin root) and ${PLUGIN_DATA} (a client-managed writable directory that survives updates). Every path must start with ./ and must not resolve outside the plugin root.
Hooks, commands, agents, rules and LSP servers are explicitly out of v1 as "too client-specific". They go in directories like com.github.copilot/ or under the extensions field of plugin.json; clients must ignore namespaces they don't implement, without validating them.
skills/ is shared for free; MCP config and the manifest get one copy each. This layout is inferred from both sets of official docs; the spec itself promises nothing about Claude Code.my-tools/
├── plugin.json # Agent Plugins: $schema + name
├── .claude-plugin/plugin.json # Claude Code manifest (optional)
├── skills/review/SKILL.md # shared, written once
├── mcp.json # explicit type + ${PLUGIN_ROOT}
├── .mcp.json # Claude Code copy + ${CLAUDE_PLUGIN_ROOT}
└── com.github.copilot/hooks/ # one client's extras live here
Two checks: on the Claude Code side, claude --plugin-dir ./my-tools loads it directly and claude plugin validate ./my-tools checks the manifest; for the skill layer, use skills-ref validate from agentskills/agentskills. The spec's own FUTURE_CONSIDERATIONS admits there is no official validator yet, so on the Agent Plugins side you rely on the two JSON Schemas and each client's error messages.
.claude-plugin/ and a marketplace; see plugin management in Skill 34.The spec explicitly does not define installation, permission or trust models, distribution and marketplaces, registries, or OAuth and credentials. FUTURE_CONSIDERATIONS lists what's pending: permission declarations in the manifest, signatures and provenance, secret injection, enterprise allowlists. None of that is in 1.0. A stdio MCP server is a program that runs on your machine; review it with the checklists in Skill 30 and Skill 12.
The spec says where a client finds components, not how it exposes a skill to users or models. The same skill can trigger differently, get a different namespace, and cost different context in each client; run it at least once in each before publishing broadly.
Supporting Claude Code means two MCP configs, which is one more place for things to drift. There are no dependency declarations either (also on the pending list), so plugins can't reference each other.
npx skills from vercel-labs/skills to symlink one copy into several agents → each vendor's native plugin format → Agent Plugins.Look at these three first: 1. The Design Decisions section of spec/1.0.0.md: ten minutes tells you what it covers and what it doesn't. 2. github/awesome-copilot: install a ready-made spec plugin in VS Code or Copilot CLI and look at a real directory. 3. Your main client's local loading path: Cursor's ~/.cursor/plugins/local/, Claude Code's --plugin-dir, Kiro's Import power from GitHub.
Add as needed: skills-ref validate (check each skill before packaging) · claude plugin validate (check the Claude Code manifest if you support it) · codex plugin marketplace add (if teammates use Codex).
Don't: build a whole plugin for one skill · put hooks at the root and hope every client reads them · treat "it installed" as "it was reviewed" · set PLUGIN_ROOT yourself in an mcp.json env block (the spec forbids it).
plugin.json at the plugin root, declaring the spec version and plugin name.com.github.copilot that holds one client's private data or directory without collisions.plugin.json has no official answer yet; until it does, the dual-manifest layout in section 03 is the safe bet.spec/1.0.0.md, schemas/1.0.0/, GOVERNANCE, MAINTAINERS (about 1.4k stars per the GitHub repo page, read 2026-10)com.github.copilot/ migration, enterprise enabledPlugins (2026-08-12)chat.plugins.marketplaces (official)copilot plugin install <name>@awesome-copilot (official marketplace)codex plugin marketplace add / codex plugin add (official)~/.cursor/plugins/local, /add-plugin (official).claude-plugin/plugin.json, .mcp.json, ${CLAUDE_PLUGIN_ROOT}, claude plugin validate (official, read 2026-10)skills-ref