Create Plugin
Use this skill to create production-ready Canvas Plugins.
A Canvas Plugin is a bundle that combines:
- one plugin manifest at
.canvas-plugin/plugin.json - one or more bundled skills under
skills/ - optional visual assets such as
assets/icon.svgandassets/logo.svg - optional connector recommendations for Composio, Canvas Email, and MCP servers
- optional marketplace metadata in a registry entry
Plugins should teach the agent which workflows belong together. They should not secretly install external services, write connector configuration, or store secrets.
Default Workflow
Clarify the plugin's audience, workflows, bundled skills, and connector recommendations.
Choose a stable plugin name in lowercase kebab-case.
Scaffold the plugin package:
plugins/<plugin-name>/<version>/ ├── .canvas-plugin/plugin.json ├── assets/ │ ├── icon.svg │ └── logo.svg ├── connectors/ │ └── optional-example.mcp.json ├── skills/ │ └── <skill-name>/ │ ├── SKILL.md │ └── agents/canvas.yaml └── LICENSEValidate that every bundled skill has a unique
nameand a useful trigger-focuseddescription.Add connector recommendations only as metadata. The user must explicitly connect Composio apps, Canvas Email accounts, or MCP servers in the UI.
For a personal Canvas installation, call
install_canvas_plugin_from_workspacewith the package directory. To update an installed plugin, first callinspect_canvas_plugin, then callupdate_canvas_plugin_from_workspacewith its version and checksum.Use
set_canvas_plugin_enabledto toggle it andremove_canvas_pluginto remove it. Removal deliberately stops when a materialized skill was edited, so the agent must preserve or resolve that user work explicitly.Package or commit the plugin to the marketplace repository only after validation passes.
Manifest Template
Use this shape for .canvas-plugin/plugin.json:
{
"name": "sales-operations",
"version": "1.0.0",
"description": "Coordinate sales workflows with CRM, email, and research connector recommendations.",
"license": "MIT",
"author": {
"name": "Canvas Studios"
},
"source": "https://github.com/canvascoding/canvas-notebook-plugin-marketplace/tree/main/plugins/sales-operations/1.0.0",
"skills": "./skills",
"interface": {
"displayName": "Sales Operations",
"shortDescription": "Prepare account research and sales follow-ups",
"category": "Sales",
"brandColor": "#0F766E",
"icon": "./assets/icon.svg",
"logo": "./assets/logo.svg",
"defaultPrompt": [
"Use /sales-account-brief to prepare a target-account brief."
]
},
"connectors": {
"composio": [
{
"toolkit": "hubspot",
"label": "HubSpot",
"recommended": true,
"reason": "Use CRM records and company data during sales workflows."
}
],
"email": [
{
"kind": "mailbox",
"label": "Sales inbox",
"providers": ["gmail", "imap-smtp"],
"recommended": true,
"reason": "Read and send sales email through Canvas Email, not through Composio Gmail."
}
],
"mcp": [
{
"name": "sales-research",
"label": "Sales Research MCP",
"configPath": "./connectors/sales-research.mcp.json",
"recommended": true,
"env": ["SALES_RESEARCH_API_KEY"],
"oauth": true,
"reason": "Optional external research tools for account enrichment."
}
]
}
}
Connector Rules
Composio recommendations:
- Use Composio toolkit slugs such as
hubspot,slack, orlinear. - Include
label,reason, andrecommendedorrequired. - Do not include API keys, connected-account IDs, trigger IDs, or user-specific secrets.
- Do not recommend Gmail through Composio for email workflows. Use Canvas Email.
Canvas Email recommendations:
- Use
connectors.email[]for mailbox needs. - Supported provider hints are
gmailandimap-smtp. - Explain why the mailbox is useful, but leave account connection to the UI.
MCP recommendations:
- Use
connectors.mcp[]for optional MCP servers. - Put example server config under
connectors/*.mcp.json. - List required environment variable names in
env. - Set
oauth: truewhen OAuth may be required. - Do not merge MCP config automatically.
Skill Bundling Rules
Each bundled skill should be narrow enough to be useful independently and clear enough to trigger correctly.
Use this skill layout:
skills/<skill-name>/SKILL.md
skills/<skill-name>/agents/canvas.yaml
SKILL.md frontmatter should include:
---
name: sales-account-brief
description: "Use this skill to prepare a target-account sales brief from CRM context, email context, and research notes."
license: "MIT"
metadata:
version: "1.0.0"
---
agents/canvas.yaml should include UI metadata:
interface:
display_name: Sales Account Brief
short_description: Prepare a target-account sales brief
brand_color: "#0F766E"
icon_small: "./icon.svg"
Marketplace Registry Entry
When preparing an official marketplace entry, add the plugin to registry.json in the marketplace repo.
Required fields:
namedisplayNamedescriptionlatestVersionversions[version].downloadUrlversions[version].packagePathversions[version].checksumversions[version].manifestPath
The checksum should be the Canvas Plugin package checksum, not a checksum of the whole git repository.
Validation Checklist
Before handing off:
.canvas-plugin/plugin.jsonexists and is valid JSON.nameis lowercase kebab-case.versionis semantic, for example1.0.0.skillspoints to a package-local directory.- Every
connectors.mcp[].configPathpoints to an existing file. - Icons and logos are package-local image files.
- No secrets, tokens, personal account IDs, or generated local paths are committed.
- Local installation succeeds through the Canvas Plugin installer.
- Marketplace install succeeds from a registry archive when publishing to the store.