Verified
How do you validate and structure an Agent Plugins 1.0 manifest for production?
A production Agent Plugin is a directory with plugin.json at the root. The Agent Plugins 1.0.0 schema requires two fields: $schema pinned to https://agent-plugins.org/schemas/1.0.0/plugin.schema.json, and a lowercase name. Skills sit at skills/<name>/SKILL.md. MCP servers sit in root mcp.json with an explicit transport type. Cursor, VS Code, and ChatGPT load that same folder. Put IDE slash commands and rules in a reverse-domain extension directory so they stay out of the portable core.
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "acme-deploy"
}
agentpluginsdirectory.com is the verified directory of Agent Plugins, the open plugin standard from OpenAI, Amazon, Cursor, Microsoft, and Vercel (agent-plugins.org) supported by ChatGPT, Codex, Cursor, GitHub Copilot, VS Code, and Kiro. Every listing is verified by fetching its plugin.json manifest and checking it against the official 1.0.0 schema.
Paste both plugin.json and mcp.json into the plugin.json validator before you push. The page runs the official 1.0.0 schemas in the browser. That is the same check the plugin directory applies before a listing goes live.
This page is the validation and production-layout pass. The companion guide to building an Agent Plugin covers creating the first folder.
What must sit at the plugin root?
The spec is blunt:
A plugin MUST include a manifest at
plugin.jsonin the plugin root.
Source: Agent Plugins Specification v1.0.0, "4. Plugin package model"
acme-deploy/
├── plugin.json
├── mcp.json
├── skills/
│ ├── rollback/
│ │ └── SKILL.md
│ └── canary-check/
│ └── SKILL.md
└── com.acme.client/
Every path a client resolves has to stay inside that root. Plugin-relative paths start with ./. A symlink that leaves the root is rejected.
$schema is a JSON Schema const. The pre-rename https://open-plugins.com/schemas/1.0.0/ string fails 1.0.0. The build guide recorded 5 such manifests across 4 repositories.
name is 1 to 64 characters. Pattern: ^(?!.*(?:--|\.\.))[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$. Lowercase letters, digits, ., -. First and last character alphanumeric. No --, no .., no _, no uppercase.
The schema sets additionalProperties: false. Ten top-level keys exist: $schema, name, plus optional version, description, author, homepage, repository, license, keywords, extensions. A stray author field kills the plugin. An unknown top-level key is reported and ignored.
How do you declare skills so clients actually find them?
Discovery is not recursive. A skill exists only at skills/<name>/SKILL.md. skills/team/rollback/SKILL.md registers zero skills. That is the usual reason a valid-looking manifest ships empty.
SKILL.md uses Agent Skills frontmatter, then instructions:
---
name: rollback
description: Roll back an Acme deployment to the last healthy revision. Use when a deploy fails health checks.
license: MIT
---
# Rollback
1. List recent releases.
2. Confirm the target revision.
3. Roll back and watch health for 90 seconds.
A missing skill does not unload the rest of the plugin. See Agent Plugins vs MCP vs skills if you need the layer split.
How do you write mcp.json transport layers that survive load?
mcp.json is optional and lives at the root. Schema: https://agent-plugins.org/schemas/1.0.0/mcp.schema.json.
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
"mcpServers": {
"acme": {
"type": "stdio",
"command": "./bin/acme-mcp",
"args": ["--stdio"],
"cwd": "./data",
"env": {
"ACME_ENV": "${ACME_ENV}"
}
}
}
}
type is required on every server. Use stdio, Streamable HTTP, or legacy HTTP+SSE. Clients do not infer transport from the object shape. command and cwd that are plugin paths start with ./. env values are opaque strings.
If one server fails to start, the client skips that entry and keeps the skills. Validate mcp.json in the same validator. A green plugin.json plus a broken MCP file still ships a broken runtime.
Where do Cursor and VS Code slash commands go?
Out of the portable core. The spec gives two slots for client-owned data:
| Slot | What it is |
|---|---|
extensions in plugin.json |
JSON keyed by reverse-domain namespace |
| Extension directory | Top-level folder named exactly that namespace |
| Portable core | Extension namespace |
|---|---|
plugin.json |
IDE slash commands |
skills/*/SKILL.md |
Cursor or VS Code rules and hooks |
mcp.json with type |
Client-only prompts |
Unknown extension directories are ignored. ChatGPT, Codex, Cursor, GitHub Copilot, VS Code, and Kiro still load the core. How to install Agent Plugins covers how each client attaches the folder.
Which validation errors fail a production load?
The census (verified 2026-08-22) holds 1,309 distinct plugins after 2,337 conformant manifests were fetched and checked. License is optional in the schema and required in practice: of those 1,309, 240 declare no license, 657 use MIT, 228 use Apache-2.0. Source: agentpluginsdirectory.com verified index, 2026-08-22.
| Check | Result if it fails |
|---|---|
Missing root plugin.json |
Plugin does not load |
Wrong $schema string |
Schema 1.0.0 reject |
Invalid name |
Schema 1.0.0 reject |
Extra keys on author |
Fatal |
Path without ./, or path outside root |
Client reject |
Invalid mcp.json |
Declared servers fail |
Nested SKILL.md |
Skill never discovered |
| One MCP crash | That server skipped |
Missing license |
Loads; many orgs will not install |
- Paste
plugin.jsoninto the validator. - Paste
mcp.jsonif you have one. - Confirm each skill is
skills/<name>/SKILL.md. - Move IDE-only files into an extension directory.
- Push to GitHub after both files pass.
FAQ
Do I need skills and MCP in the same plugin? No. Either component type is optional. A skills-only package is valid 1.0.0. 701 of 1,309 verified plugins are skills-only (2026-08-22).
Can I put plugin.json in a subfolder? No. The spec requires it at the plugin root.
Is the validator the same check as listing? Yes. The directory fetches raw plugin.json and checks it against the official 1.0.0 schema. The validator is that check in the browser.
Where is the full normative text? The reproduced specification and agent-plugins.org.