Build a plugin

A plugin is a public GitHub repository, or a folder in one, that gives bots skills, a hosted MCP server, or both. Rakazo reads the files; it never runs code from the repository.

Minimal example

The hello world plugin is a complete plugin you can copy:

hello-world/
├── plugin.json
└── skills/
    └── say-hello/
        └── SKILL.md

plugin.json follows Agent Plugins:

{
  "$schema": "https://agent-plugins.org/schemas/1.1.0/plugin.schema.json",
  "name": "hello-world",
  "version": "1.0.0",
  "description": "A minimal example plugin with one skill.",
  "author": { "name": "Rakazo" },
  "license": "Apache-2.0",
  "keywords": ["example"]
}

skills/say-hello/SKILL.md starts with a name and a description that says when to use it:

---
name: say-hello
description: Greet the user by name and suggest one thing to try next. Use when the user says hello or asks what you can do.
---

1. Greet the user by name if you know it.
2. In one sentence, suggest one thing they could ask you to do today.

Manifest

Rakazo looks for the manifest in this order:

File Format
plugin.json Agent Plugins. $schema must be the 1.0.0 or 1.1.0 plugin schema
.cursor-plugin/plugin.json Cursor plugin
.grok-plugin/plugin.json Grok plugin

name is required: up to 64 lowercase letters, digits, dots and hyphens, such as acme-tickets. version, description, author (name, email, url), homepage, repository, license and keywords are optional. Other fields are ignored.

What a plugin can include

Path Becomes
skills/<folder>/SKILL.md A skill. Text files beside it (.md, .mdx, .txt, .json, .yaml, .yml, .csv) come along as references
commands/<name>.md A skill the user can run as /<name>. $ARGUMENTS is what they type after it
agents/<name>.md A helper skill that hands work to a sub-agent. Needs name and description frontmatter
mcp.json (or .mcp.json for Cursor and Grok plugins) Hosted MCP servers

Skill names must be unique in the plugin and must not match a built-in skill, such as interrogate. Other files, such as a README, are ignored.

MCP servers

Only hosted servers on public https:// URLs install. For an Agent Plugins manifest, mcp.json uses the matching schema and each server has only type (streamable-http or sse), url and optional headers:

{
  "$schema": "https://agent-plugins.org/schemas/1.1.0/mcp.schema.json",
  "mcpServers": {
    "acme": { "type": "streamable-http", "url": "https://mcp.acme.com/mcp" }
  }
}

Cursor and Grok plugins may also use "type": "http". Don’t put keys or ${...} placeholders in the URL or headers: each user signs in to the server after installing, through its OAuth or with their own key.

What isn’t supported

A plugin with any of these is refused, because it would only install in part:

  • Local (stdio) MCP servers, which run a command on the host.
  • rules/, hooks/, automations/ or .lsp.json, which only work inside an editor.
  • Scripts, binaries or other non-text files in a skill folder.
  • Symlinks or submodules in a skill, command, agent, manifest or MCP config.
  • More than 200 manifest, MCP, skill, reference, command and agent files, any of them over 100 KB, more than 4 MB in total, or a skill with more than 40 reference files or 400 KB of them.

Test it

In Rakazo, open Integrations, choose + → From GitHub, and paste your repository URL. For a plugin in a folder, use the folder’s URL, such as https://github.com/acme/plugins/tree/main/acme-tickets. The preview lists every skill and server and anything that was left out.

Submit it

Send it from Submit a plugin, or with the submission API. We review every submission, preview it the same way an install does, and approve it only when every part installs, it has at least one skill or MCP server, and its MCP servers are public. Approval lists the commit we checked, so later pushes reach the marketplace when you submit again.