Plugins let you install related customizations together instead of setting up each one separately. For example, a testing plugin could combine a skill for running tests, a review agent, and an MCP server for a test-reporting service.
You can use plugins in:
- The {% data variables.copilot.github_copilot_app %}.
- {% data variables.copilot.copilot_cli %}.
- {% data variables.copilot.copilot_cloud_agent %}.
- {% data variables.product.prodname_vscode %}. For supported components and installation, see Agent plugins in {% data variables.product.prodname_vscode_shortname %}.
A plugin can contain components that only work in a particular surface. Check that the plugin supports the surface you use. For example, the LSP server configuration described in this category is for {% data variables.copilot.copilot_cli_short %}.
The component paths and directory examples below describe plugin formats for {% data variables.copilot.copilot_cli_short %}. Other surfaces can support different components.
A plugin can contain some or all of the following components. The locations of these components depend on the plugin format:
- Custom agents — Specialized AI assistants (
*.agent.mdfiles inagents/) - Skills — Task-specific instructions, scripts, and resources (skills subdirectories in
skills/, containing aSKILL.mdfile) - Hooks — Event handlers that intercept agent behavior (a
hooks.jsonfile in the plugin root, or inhooks/) - Extensions — Code that adds capabilities such as tools and slash commands in supported surfaces
- MCP server configurations — Model Context Protocol integrations
- LSP server configurations — Language Server Protocol integrations (an
lsp.jsonfile in the plugin root, or in.github/)
{% data variables.product.prodname_copilot_short %} supports two plugin formats:
- Agent Plugins 1.0 is a portable format for sharing skills and MCP server configurations across compatible clients. To use this format, set
$schemainplugin.jsontohttps://agent-plugins.org/schemas/1.0.0/plugin.schema.json. Skills are discovered fromskills/, and MCP server configuration is discovered frommcp.jsonat the plugin root. These locations cannot be configured in the manifest. Choose Agent Plugins 1.0 when you want to make skills and MCP servers portable. - Legacy {% data variables.product.prodname_copilot_short %} plugins do not declare the Agent Plugins
$schema. They use the existing manifest fields and component discovery behavior, including configurable component paths and MCP configuration in.mcp.json,.github/mcp.json, or themcpServersmanifest field. Choose the legacy format when you need configurable component paths or are maintaining an existing {% data variables.product.prodname_copilot_short %}-specific plugin.
For a new plugin, use Agent Plugins 1.0 unless you require configurable component paths. Use the legacy format primarily for existing legacy plugins.
Both formats are supported. Adding $schema changes how {% data variables.product.prodname_copilot_short %} interprets the manifest and discovers components. Plugins without $schema continue to load as legacy plugins.
A plugin is a directory with a specific structure and a plugin.json manifest file. Agent Plugins 1.0 requires the manifest at the plugin root. Legacy plugins support additional manifest locations. The manifest gives the plugin a name and metadata. Depending on the format, it can also point to components. Alongside the manifest, the directory can contain agents, skills, hooks, MCP server configurations, and LSP server configurations.
Agent Plugins 1.0 stores skills and MCP servers in standard locations so compatible clients can discover them. Other components, including agents, hooks, commands, and LSP servers, are client-specific. {% data variables.product.prodname_copilot_short %} reads these components from the com.github.copilot directory. Other clients ignore this directory, so the same plugin can combine shared skills and MCP servers with {% data variables.product.prodname_copilot_short %}-specific components.
An Agent Plugins 1.0 directory can look like this:
my-plugin/
├── plugin.json # Required manifest
├── skills/ # Skills (optional)
│ └── deploy/
│ └── SKILL.md
├── mcp.json # MCP server config (optional)
└── com.github.copilot/ # Copilot components (optional)
├── agents/
│ └── helper.agent.md
├── commands/
├── rules/
├── hooks/
│ └── hooks.json
└── lsp.json
The manifest must include the Agent Plugins 1.0 $schema. For supported top-level manifest fields, name requirements, and component locations, see Agent Plugins 1.0 manifest fields.
A legacy {% data variables.product.prodname_copilot_short %} plugin directory can look like this:
my-plugin/
├── plugin.json # Required manifest
├── agents/ # Custom agents (optional)
│ └── helper.agent.md
├── skills/ # Skills (optional)
│ └── deploy/
│ └── SKILL.md
├── hooks.json # Hook configuration (optional)
├── .mcp.json # MCP server config (optional)
└── lsp.json # LSP server config (optional)
For the full set of fields you can include in the manifest, see AUTOTITLE. For step-by-step guidance on authoring a plugin, see AUTOTITLE.
Plugins provide the following benefits:
- Reusability across projects
- Team standardization of {% data variables.product.prodname_copilot_short %} configuration
- Share domain expertise (for example, by providing the skills of a Rails expert, or a Kubernetes expert)
- Encapsulate complex MCP server setups
You can install plugins from:
- A marketplace
- A repository
- A local path
A marketplace is a location where developers can publish, discover, install, and manage plugins. It's a bit like an app store—but for plugins.
Examples of marketplaces include:
- copilot-plugins (added by default)
- awesome-copilot (added by default)
- claude-code-plugins
- claudeforge-marketplace
How you install a plugin depends on which client you're using:
- In {% data variables.copilot.copilot_cli_short %}, you can install plugins using the
copilot plugin installcommand or the/plugin installslash command, or by adding the plugin to theenabledPluginsfield of either a user-level~/.copilot/settings.jsonfile or a repository-level.github/copilot/settings.jsonfile. See AUTOTITLE. - In {% data variables.copilot.copilot_cloud_agent %}, you install plugins by adding them to the
enabledPluginsfield of the repository's.github/copilot/settings.jsonfile. To install plugins from a marketplace that isn't registered by default, you can also add the marketplace to theextraKnownMarketplacesfield in the same file. - In the {% data variables.copilot.github_copilot_app %}, click Customize, then click Plugins to browse marketplaces and install plugins.
- In {% data variables.product.prodname_vscode %}, use the plugin marketplace commands described in the {% data variables.product.prodname_vscode_shortname %} documentation linked above.
Enterprise administrators can define plugin standards that apply to users on the enterprise's {% data variables.product.prodname_copilot_short %} plan, including specifying additional marketplaces and plugins that are automatically installed. See AUTOTITLE.
A plugin marketplace is a registry of plugins that you can browse and install from. A marketplace can be hosted in a repository on {% data variables.product.prodname_dotcom_the_website %}, in any other online Git hosting service, or on your local or shared file system.
A marketplace is defined by a marketplace.json file, which provides metadata about the marketplace and lists the plugins it makes available. Each entry in the marketplace's plugins array describes a plugin—including its name, description, version, and the path to the plugin's directory.
Because plugins in a marketplace are versioned, marketplaces make it easy to discover, install, and update plugins, and to share them across a team. For step-by-step guidance on creating a marketplace, see AUTOTITLE.
Any functionality that you could add with a plugin, you could also add by configuring {% data variables.product.prodname_copilot_short %} manually—for example, by adding custom agent profiles or MCP servers. However, plugins provide several advantages over manual configuration:
