plugin.json / mcp.json # portable Agent Plugins 1.0
.mcp.json # Claude / Codex HTTP MCP adapter
.claude-plugin/ # Claude Code metadata + marketplace
.codex-plugin/ # OpenAI Codex metadata
.app.json.example # OpenAI apps mapping template
skills/ # shared skills (canonical)
docs/ # human docs
scripts/validate.sh # CI entrypoint
assets/ # icon.png, logo.png
No .cursor-plugin/. No MCP server source.
./scripts/validate.shThe script:
- Parses all JSON manifests
- Validates
plugin.json/mcp.jsonagainst pinned Agent Plugins 1.0 schemas inschemas/(refreshed from the agent-plugins-spec GitHub raw URLs if missing; the canonical$idremains on agent-plugins.org) - Enforces skill folder rules (
SKILL.md+ matchingname) - Checks relative paths in Claude/OpenAI adapters
- Sync-checks name/version/MCP URL across manifests
- Runs secret heuristics (
Bearer, obvious API keys, client secrets) - Optionally runs
claude plugin validate .whenclaudeis installed (non-fatal if missing)
- Change only
skills/<name>/for skill content - Keep tool names aligned with the platform MCP registry (see CONTRIBUTING.md)
- Put long checklists under
references/ - Re-run
./scripts/validate.sh
When bumping version, update all of:
plugin.json.claude-plugin/plugin.json.codex-plugin/plugin.jsonCHANGELOG.md
MCP URL must stay https://mcp.seenode.com/mcp in both mcp.json and .mcp.json.
Source marks live in the Seenode website repo (favicon.svg, logo-white.svg). Regenerate PNGs into assets/icon.png and assets/logo.png if the brand changes — do not invent alternate logos.
See the testing notes in publishing.md: local plugin load + OAuth, Claude CLI validate, OpenAI registration, and a full mutating deploy are environment-dependent.