extension_create
Create a browser extension project from a template in the extension.dev catalog.
Quick start
Create a new tab extension with React in ./my-newtab
Asked for a React new tab extension, the agent scaffolds it from a template and lists what landed.
How the agent uses it
Call extension_templates first to see what is available. The scaffolder may initialize a git repository in the new project (with a first commit), and it also writes store metadata and a .gitignore of its own. Read the result's defaultsApplied block for the decisions this tool can read back: parent directory, template, package manager, target browser and whether a git repository was initialized by this call. The result's scripts lists every package.json script that runs the engine, with the browser it targets and the folder it writes: the scaffolder passes no --browser to dev, start and build, so the engine runs them as chromium and npm run build writes dist/chromium, while build:chrome writes dist/chrome; read the folder from that list instead of assuming one. A scaffold that answers created is verified (its manifest was found and read): it needs no build to prove it, so do not run npm run build to check it; the next step is extension_dev with the answered projectPath, which runs it in a browser, as the answer's nextSteps says. After a successful scaffold this tool sends one telemetry event, draft_seeded (template slug, source and commit, a random install id, never a path or a name), to PostHog; the Telemetry section of this package's readme names the two environment variables that turn it off.
Reference
| Group | local, on by default |
| Tier | Create and build |
| Needs | none |
| Read only | no |
| Destructive | no |
| Idempotent | no |
| Reaches the open web | yes |
Inputs
| Input | Type | Required | Default | What it does |
|---|---|---|---|---|
projectName | string | yes | Name of the extension project (used as directory name). Alias: name. | |
parentDir | string | no | Directory to create the project inside. Defaults to the MCP server process cwd, NOT the caller's cwd, so pass it whenever you care where the project lands. Aliases: parent, into. | |
template | string | no | "typescript" | Template slug from the extension.dev catalog (e.g. 'react', 'ai-claude', 'content-vue'). extension_templates discovers them. |
install | boolean | no | true | Install dependencies after creation |
When it fails
- The answer depends on the network. This tool reaches the open web, so a refusal can be the network, not the project.
Next
- MCP server: install, the two groups and the session gates
- Install in your client
extension_add_feature: Plan the surface before adding an options page, a popup, a side panel, a content script, a devtools panel, a new tab page or a background script to an existing extension.extension_build: Build a browser extension for production.extension_docs_search: Find the docs page to cite before answering any question about a WebExtension API, a manifest key, a permission, or a difference between Chrome, Firefox, Edge and Safari.extension_templates: Browse the extension.dev template catalog.