Build, run, inspect, and publish browser extensions from any MCP client. 28 tools, 11 browsers.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Give your AI agent hands for browser extension development. 30 MCP tools that scaffold, run, inspect, debug, and publish cross-browser extensions.
Works with Claude Code, Claude Desktop, Cursor, and any MCP client.
extension.dev Β· Extension.js Β· Templates Β· Examples Β· Discord
Extensions fail silently: content scripts that never inject, panels that never open, permissions that return undefined with no error. An agent editing files blind will happily "fix" all of them without noticing none of them work.
These tools give agents eyes on the live browser, so they debug from evidence instead of guessing:
chrome.storage contents, and the loaded-extension listBuilt on Extension.js, the open-source cross-browser extension framework.
| Claude Code | Claude Desktop | Cursor |
Or install it as a plugin, the MCP server plus the /extension, /extension-add, /extension-debug, and /extension-publish commands in one step:
.mcp.jsonThis server gives agents hands; @extension.dev/skill gives them judgment: the cross-browser rules, silent-failure gotchas, debugging playbooks, and store checklist, packaged in the open Agent Skills format. With both installed, agents know to verify against the live browser instead of guessing, and these tools make that a one-call operation.
The package ships drop-in instructions, slash commands, and rules for extension projects:
| Tier | Tool | Description |
|---|---|---|
| build | extension_create | Scaffold from a template |
| build | extension_templates | Browse 50+ templates (list) and read one's source (source) |
| build | extension_add_feature | Add sidebar/popup/content script |
| build | extension_build | Build for production |
| run | extension_dev | Dev server with HMR |
| run | extension_start | Build + launch the production build (build: false launches the existing dist) |
| run | extension_wait | Poll the dev-server ready contract |
| run | extension_stop | Stop a dev/start/preview session (server + browser) |
| see | extension_manifest_validate | Cross-browser manifest validation |
| see | extension_analyze | Static analysis of the built extension on disk |
| see | extension_inspect | Deep live inspection of a running extension (closed shadow roots, probes) |
| see | extension_dom_snapshot | Shallow DOM snapshot of a chosen tab or extension surface over the agent bridge |
| see | extension_list_extensions | List loaded extensions (Chromium and Firefox) |
| see | extension_logs | Stream logs from every context |
| see | extension_doctor | Diagnose the dev session leg by leg (ready contract, ports, token, executor, browser) |
| see | extension_theme_verify | Verify a Chrome theme manifest against the colors Chrome actually paints |
| test | extension_assert | State expectations about a running extension and get one verdict each: pass, fail, or inconclusive |
| act | extension_eval | Evaluate in a context (needs allowEval: true on extension_dev) |
| act | extension_storage | Read/write chrome.storage |
| act | extension_reload | Reload extension or tab |
| act | extension_open | Open a surface / trigger action, command |
| browsers | extension_browsers | Detect, list, install, and uninstall browsers |
| platform | extension_auth | Device login at extension.dev, plus login status and logout |
| platform | extension_project_create | Create the extension.dev project for a built extension, headless, via device approval |
| platform | extension_preview_web | Render a build in the web emulator, and share it as a link |
| platform | extension_shares | List every link you have shared, and revoke one permanently |
| platform | extension_publish | Publish a shareable preview to extension.dev |
| platform | extension_release_promote | Promote a build to a release channel, headless |
| platform | extension_submit | Submit for store review: Chrome, Firefox and Edge, through extension.dev |
| platform | extension_release_status | Read release channels, recent builds, and store submission and review state |
Browser-launching tools (dev, start) shell out to the extension CLI, the project's own node_modules/.bin/extension when present, otherwise npx extension@<pinned> at the version this package is verified against; everything else runs in-process.
Every other tool here hands back a reading: a DOM, a log window, an evaluated
expression. Turning a reading into "the popup works" was left to the agent, as
a string of JavaScript it wrote on the spot, which is the guesswork the paired
skill exists to prevent. extension_assert states the expectation and returns
the verdict.
Each check comes back as pass, fail or inconclusive, and the run is a
pass only when every check passed. inconclusive is the part that matters: it
means this platform cannot cover the question today, and the check carries a
settledBy naming the evidence that would answer it. A content script's
execution is not observable from outside its isolated world, so
content-script-injected passes only on a line the script itself wrote and is
inconclusive over a declared match, never a pass. "No console errors" over a
session that never built is inconclusive too, because zero errors and zero
events are the same number. A read the platform refuses, such as
chrome.storage on a session started without allowControl, is inconclusive
rather than a failure: nothing was learned about the extension.
The verdict document is the same grammar the preview lane's CI verdict uses
(@extension.dev/preview-verdict), with its own contract name and its own
check registry, so a document from one lane can never be mistaken for the
other's. Each check here names the preview check it is the live-browser
counterpart of, and a contract test holds the two grammars together.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/mcp-291)<a href="https://allmcps.com/mcp/mcp-291"><img src="https://allmcps.com/api/badge/mcp-291?style=directory" alt="Extensiondev MCP on AllMCPs" /></a>