@extension.dev/mcp

中文文档
10.22.0发布于 2026/11/09Apache-2.0TypeScriptES Module近 30 天下载 2651

MCP server that lets AI agents (Claude Code, Claude Desktop, Cursor, Copilot, Codex) build, run, inspect, and publish browser extensions. 38 tools for scaffolding, live DOM inspection, log streaming, and store-ready builds across Chrome, Edge, Firefox, Sa

原始使用文档
文档目录19 节
  1. Why an MCP server for extensions
  2. Watch it work
  3. Browsers
  4. Clients
  5. Setup
  6. Claude Code
  7. Cursor
  8. VS Code
  9. Codex
  10. Other clients (Claude Desktop and .mcp.json)
  11. Flags
  12. Telemetry
  13. Pair with the skill
  14. Tools
  15. Asserting instead of guessing
  16. Safari
  17. Platform (private alpha)
  18. Community
  19. License

@extension.dev/mcp Version Downloads Discord

Give your AI agent hands for browser extension development. 38 MCP tools that scaffold, run, inspect, debug, test, and build cross-browser extensions on your machine, plus a platform lane (private alpha) to share and publish them.

Logo
claude mcp add extension-dev npx @extension.dev/mcp

Works with Claude Code, Claude Desktop, Cursor, and any MCP client.

extension.dev · Docs · Templates · Discord

Why an MCP server for extensions

Extensions fail silently: content scripts that never inject, panels that never open, permissions that return undefined with no error. These tools give the agent eyes on the live browser, so it debugs from evidence instead of guessing.

  • Scaffold from the 50+ templates behind templates.extension.dev, or add a popup, sidebar, or content script to an existing project
  • Run the dev server with HMR in Chrome, Firefox, Edge and every browser below, plus Safari on macOS (no HMR yet)
  • See the live DOM, logs from every extension context, chrome.storage, and the loaded-extension list
  • Act: evaluate code in any context, trigger the action button and commands, reload the extension
  • Test: state expectations about the running extension and get one verdict each
  • Ship: validate the manifest cross-browser and build for production. On the platform lane: share a preview link, promote a build, and submit to the stores

Built on Extension.js, the open source framework extension.dev sponsors. Every engine command runs the project's own node_modules/.bin/extension when the project has one, else npx extension@<pin> at the version this server pins (EXTENSION_MCP_CLI_VERSION changes the pin). To run a fix that has not shipped yet, set EXTENSION_MCP_ENGINE_DIR to a compiled Extension.js checkout root (the folder holding programs/extension/bin/extension.cjs) or to a built extension package folder (holding bin/extension.cjs): every spawn then runs node <that bin>, the project's engine and the pin are bypassed, extension_doctor's project-engine check names the path with its version, sha and branch, and a path with no bin refuses every spawn instead of falling back. EXTENSION_MCP_ENGINE_BIN names the exact bin file instead.

Watch it work

Asked to run the extension, the agent starts the dev session, Chrome opens with it loaded, and the agent reports the session, from a real Claude Code session

Browsers

extension_dev opens the extension in the browser you name.

ChromeChromiumEdgeBraveOperaFirefoxSafari
Google ChromeChromiumMicrosoft EdgeBraveOperaMozilla FirefoxApple Safari

The Chromium family and Firefox get HMR, control, eval, inspect and assert (Firefox over its debugger protocol and the agent bridge, no CDP). Safari gets dev and build on macOS, no HMR and no inspect; the full list of what works there is under Safari. Plus Vivaldi, Yandex, Waterfox, Zen and Floorp, and any Chromium or Gecko binary by path.

Clients

Claude CodeClaude DesktopCursorVS CodeCodex
Claude CodeClaude DesktopCursorVS CodeCodex

Setup

Claude Code

claude mcp add extension-dev -- npx @extension.dev/mcp --features=local,platform

Or install it as a plugin, the MCP server plus the /extension, /extension-add, /extension-debug, and /extension-publish commands in one step:

/plugin marketplace add extensiondev/mcp
/plugin install extension-mcp@extensiondev-mcp

Cursor

Install MCP Server

Or paste the .mcp.json block below into .cursor/mcp.json.

VS Code

code --add-mcp '{"name":"extension-dev","command":"npx","args":["@extension.dev/mcp","--features=local,platform"]}'

Or paste it into .vscode/mcp.json under servers, with "type": "stdio" on the entry.

Codex

codex mcp add extension-dev -- npx @extension.dev/mcp --features=local,platform

Or write it into ~/.codex/config.toml as a [mcp_servers.extension-dev] table with the same command and args.

Other clients (Claude Desktop and .mcp.json)

.mcp.json:

{
  "mcpServers": {
    "extension-dev": {
      "command": "npx",
      "args": [
        "@extension.dev/mcp",
        "--features=local,platform"
      ]
    }
  }
}

Flags

  • By default the server exposes the 25 of its 38 tools that work on this machine (the 13 platform tools are off). --features=local,platform adds the platform group. Env: EXTENSION_DEV_FEATURES.
  • --no-ship refuses every call that puts something in front of other people (publish, promote, a real submit, a shared preview, a revoke). Env: EXTENSION_DEV_NO_SHIP=1.
  • --project <workspace>/<project> pins the server to one project. Env: EXTENSION_DEV_PROJECT.
  • When a platform act answers approval-required on a desktop (not headless, not CI, and on Linux with a display), the server opens the approval page once in the default browser. --no-ship or EXTENSION_DEV_NO_AUTO_OPEN=1 turns that off.

A refused call answers E_TOOL_DISABLED with the flag to change. Human approval for store submissions and stable promotions, the MCP annotations every tool carries, and the <untrusted-data-ID> fence around page-written text are described under Server flags.

Telemetry

extension_create sends one draft_seeded event to PostHog at us.i.posthog.com after a successful scaffold (template slug, source and commit, a random per-process session id, never a path or a name), and the platform tools send a per-install id header with their calls. EXTENSION_DEV_NO_TELEMETRY=1 or DO_NOT_TRACK=1 stops both. The full payload is listed under Telemetry.

Pair with the skill

This server gives agents hands; @extension.dev/skill gives them judgment: the cross-browser rules, silent-failure gotchas, debugging playbooks, and store checklist, in the open Agent Skills format. The package also ships Claude Code rules and the four slash commands under claude/.

npm i -D @extension.dev/skill
mkdir -p .claude/skills && cp -R node_modules/@extension.dev/skill/skills/extension-dev .claude/skills/

Tools

On by default, the 25 that work on this machine:

TierToolDescription
buildextension_createScaffold from a template
buildextension_templatesBrowse 50+ templates (list) and read one's source (source)
buildextension_docs_searchSearch the Extension.js and extension.dev docs by keyword
buildextension_add_featurePlan an options page, popup, side panel, content script, devtools panel or new tab page for an existing project
buildextension_buildBuild for production
runextension_devDev server with HMR
runextension_startBuild + launch the production build (build: false launches the existing dist; outputPath launches any prebuilt unpacked directory)
runextension_tryRun a published extension.dev build in a fresh local browser, use it once with a screenshot, and say what it can reach; action: "close" removes it
runextension_waitPoll the dev-server ready contract
runextension_stopStop a dev/start/preview session (server + browser)
seeextension_manifest_validateCross-browser manifest validation
seeextension_analyzeStatic analysis of the built extension on disk
seeextension_inspectDeep live inspection of a running extension (closed shadow roots, probes)
seeextension_dom_snapshotShallow DOM snapshot of a chosen tab or extension surface over the agent bridge
seeextension_screenshotScreenshot of an open extension surface or page, saved as a .png over the session's debug port
seeextension_list_extensionsList loaded extensions (Chromium and Firefox)
seeextension_logsStream logs from every context
seeextension_doctorDiagnose the dev session leg by leg (ready contract, ports, token, executor, browser)
seeextension_theme_verifyVerify a Chrome theme manifest against the colors Chrome actually paints
testextension_assertState expectations about a running extension and get one verdict each: pass, fail, or inconclusive
actextension_evalEvaluate in a context (needs allowEval: true on extension_dev)
actextension_storageRead/write chrome.storage
actextension_reloadReload extension or tab
actextension_openOpen a surface (popup, options, sidebar, devtools panel, override pages) / trigger action, command
browsersextension_browsersDetect, list, install, and uninstall browsers

On with --features=local,platform, the 12 that reach the extension.dev platform (private alpha):

TierToolDescription
platformextension_authDevice login at extension.dev for one project or a list of them, plus login status and logout
platformextension_workspace_createCreate an extension.dev workspace, headless, via device approval; the approver becomes its owner
platformextension_project_createCreate the extension.dev project for a built extension, or several under one approval, headless, via device approval
platformextension_preview_webRender a build in the web emulator, and share it as a link
platformextension_sharesList every link you have shared, share a platform build as a link, and revoke one permanently
platformextension_publishMint a shareable link for a build extension.dev already holds (nothing is uploaded)
platformextension_release_promoteRelease a build to a channel, headless
platformextension_submitSubmit for store review: Chrome, Firefox, Edge and Safari, through extension.dev
platformextension_submit_checkRead a store submission's readiness and status, rehearse it, and ask for its approval, under a read-only hint
platformextension_release_statusRead release channels, release history, recent builds, and store configuration, submission and review state
platformextension_approvalsRead one approval, or revoke a pending or approved and unused one so it never runs
platformextension_buildsRead the platform's builds (recent builds, one build's artifacts and integrity, its CI logs), save a build's package to disk verified against its integrity report, start a rebuild, change build settings as a plain call under the owner's token, and add a release channel
platformextension_workspaceRead a workspace with any of its project logins: plan and limits, projects and last builds, usage, and a project's settings

A dev session carries the control channel that extension_storage, extension_reload, extension_open and extension_dom_snapshot ride: it is local, same machine, same user, and on unless extension_dev is called with allowControl: false. extension_eval is the one gate that stays off until allowEval: true is passed on extension_dev (it implies control). A session does not change its gates on a second call: call extension_dev again with what you need plus replace: true, which stops the first session.

Asserting instead of guessing

Every other tool hands back a reading. extension_assert states the expectation and returns the verdict.

Asked whether the extension works, the agent runs it, states expectations and reads one verdict each, from a real Claude Code session

{
  "projectPath": "/path/to/extension",
  "expect": [
    { "assert": "background-worker-booted" },
    { "assert": "surface-rendered", "surface": "popup", "selector": "[data-testid=root]" },
    { "assert": "storage-key-present", "key": "settings", "area": "local" },
    { "assert": "console-errors-empty", "context": ["background", "popup"] },
    { "assert": "content-script-injected", "url": "https://shop.example/cart" },
    { "assert": "no-outside-requests", "allow": ["api.shop.example"] }
  ]
}

Each check comes back pass, fail or inconclusive, and the run passes only when every check passed. inconclusive means this platform cannot cover the question today, and the check carries settledBy naming the evidence that would answer it: a content script passes only on a line it wrote itself, "no console errors" over a session that never built is inconclusive, and a read the session refuses (chrome.storage on a session started with allowControl: false) is inconclusive rather than a failure.

Safari

A Safari dev session runs on the same bridge as every other engine: on Extension.js 4.1.21 or newer, extension_dev with browser: "safari" (macOS with Xcode) builds the app, opens it, reloads it on every save and streams its logs. Safari's MV3 background CSP blocks eval, there is no CDP or RDP path for extension_inspect, and opening a tab needs a safaridriver session; the limits are listed under Safari.

Platform (private alpha)

The thirteen platform tools connect agents to extension.dev. They stay off until the server is started with --features=local,platform, and sharing, publishing, promoting and submitting need a login:

npx @extension.dev/mcp login --project <workspace>/<project>

You approve a code at extension.dev/device; no GitHub token reaches your machine, and the project-scoped token is stored locally, never returned to the agent, and lives at most 7 days. extension_preview_web with share: true uploads the build it just made and returns a link that renders those bytes in the web emulator, with its expiresAt and a revokeUrl. extension_publish returns the shareable URL of a build extension.dev already holds; extension_submit sends a built extension into store review through extension.dev, which holds your store credentials, and defaults to a dry run.

extension_submit_check takes the calls that only read or ask under readOnlyHint: true, so a client's permission layer can tell them from a store act: preflight, status, the default dry run, and every approval request, the first call with no approvalId that executes nothing and only asks a workspace owner to approve the exact act on extension.dev (a submit with dryRun: false, publish, cancel, rollout, release, a sync-listing carrying a value the platform derives, and a configure-store to a submission mode that sends the next upload to a review that publishes it). It never sends a write or an approvalId to the platform. extension_submit takes the call that spends the approval, a plain sync-listing or configure-store, which writes at once, and every other store act, so it carries the destructive hint; it still accepts the read calls too. If you accept the approval page as the only gate for those acts as well, allow both tools by name, in Claude Code's .claude/settings.json:

{ "permissions": { "allow": ["mcp__extension-dev__extension_submit_check", "mcp__extension-dev__extension_submit"] } }
Chrome Web StoreFirefox Add-onsEdge Add-onsApp Store
Chrome Web StoreFirefox Add-onsEdge Add-onsApp Store

A push to the project's build branch spends one platform build only when it changes a file under the project's root directory; a push to another branch, one that changes only docs or license files outside public/, or one whose head commit says [skip build] (or [skip ci], or carries an Extension-Build: skip trailer on its own line) spends nothing, and extension_builds lists each skipped push with its outcome, SKIP_REQUESTED for the last. extension_workspace reads the allowance and the branch and root directory the filters read.

The details, the approval flow and the batch login for several projects are under Share a build in progress, Publish is not submit and Login.

Community

  • Join the extension.dev Discord for help and feedback
  • Browse production-ready templates at templates.extension.dev
  • Follow the platform's public packages on GitHub
  • Report Extension.js framework issues on GitHub

License

Apache-2.0 (c) 2026 Cezar Augusto and the extension.dev collaborators. See LICENSE.

版本与发布记录

@extension.dev/mcp 共发布 84 个版本,首次发布于 2026/05/28;过去 12 个月发布了 84 个版本。

版本发布日期距今
10.22.0latest2026/11/095 天前
10.21.02026/11/058 天前
10.20.02026/11/059 天前
10.15.12026/10/2024 天前
10.15.02026/10/2025 天前
10.14.12026/10/1826 天前

其他发布通道:canary → 3.17.0-canary.1779910200.ddcd9eb。

关于 @extension.dev/mcp 的常见问题

@extension.dev/mcp 是什么?

MCP server that lets AI agents (Claude Code, Claude Desktop, Cursor, Copilot, Codex) build, run, inspect, and publish browser extensions. 38 tools for scaffolding, live DOM inspection, log streaming, and store-ready builds across Chrome, Edge, Firefox, Sa

如何安装 @extension.dev/mcp?

在项目目录运行 npm install @extension.dev/mcp,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 extension-mcp,可以用 npx extension-mcp 直接运行。

@extension.dev/mcp 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@extension.dev/mcp 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@extension.dev/mcp 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.12。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@extension.dev/mcp 可以商用吗?

@extension.dev/mcp 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@extension.dev/mcp 的下载量有多少?

根据 npm 官方下载统计,@extension.dev/mcp 在 2026/10/14 – 2026/11/12 这 30 天内被下载 2,651 次,日均约 88 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@extension.dev/mcp 还在维护吗?

最新版本 10.22.0 发布于 2026/11/09(5 天前);至今共发布 84 个版本,其中过去 12 个月发布了 84 个;首次发布于 2026/05/28。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。