Skip to main content
Glama
extensiondev

@extension.dev/mcp

by extensiondev

extension_start

Launch a production build of a browser extension: build, serve, and open it in a browser to verify what ships. Use it after coding to test the final artifact, with no hot reload.

Instructions

Run the PRODUCTION build in a browser: build the project, serve it, and launch. There is no hot module replacement and no control channel, so your edits are not picked up and extension_eval, extension_storage, extension_reload, extension_open and extension_dom_snapshot cannot attach to this session. Use extension_dev while writing code, and this to check what actually ships. Pass build:false to launch an existing dist/ without rebuilding, or outputPath to launch any prebuilt unpacked extension directory, one another toolchain produced included, which implies build:false.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
hostNoBind host, default 127.0.0.1. Use 0.0.0.0 in Docker or devcontainers.
portNoPassed to the engine as --port (0 for auto-assign). A production start serves nothing over it today; it matters only to a toolchain that reads it.
buildNoBuild before serving. false serves the existing dist/<browser> as-is and fails when there is none.
browserNochrome
profileNoProfile path, or "false" to reuse the real user profile. Omit for a throwaway one.
polyfillNoApply cross-browser polyfill (build only)
noBrowserNoBuild (or, with build:false, check the dist) without launching a browser. A production start serves nothing, so with no browser the engine process ends once the build does; read the result with extension_build rather than a session.
extensionsNoExtra extension paths or store URLs to load alongside the project
outputPathNoAn existing unpacked extension directory to launch as it is (a manifest.json at its root), for an artifact built by another toolchain or an exact release candidate. Implies build:false; projectPath still names the project the session belongs to. Relative paths resolve against projectPath.
publicHostNoHost the browser dials for HMR and reload when it differs from the bind host
geckoBinaryNoCustom Gecko/Firefox binary to launch; `browser` still names the target family the engine builds for (gecko-based when none is given).
projectPathYesExtension project root
startingUrlNoURL the browser opens on launch
chromiumBinaryNoCustom Chromium-based binary to launch; `browser` still names the target family the engine builds for (chromium-based when none is given).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv10.10.13
    • changedInput schema / properties / chromiumBinary / description
      Previous value: -"Custom Chromium-based binary (overrides browser)"New value: +"Custom Chromium-based binary to launch; `browser` still names the target family the engine builds for (chromium-based when none is given)."
    • changedInput schema / properties / geckoBinary / description
      Previous value: -"Custom Gecko/Firefox binary (overrides browser)"New value: +"Custom Gecko/Firefox binary to launch; `browser` still names the target family the engine builds for (gecko-based when none is given)."
    • changedInput schema / properties / noBrowser / description
      Previous value: -"Serve without launching a browser"New value: +"Build (or, with build:false, check the dist) without launching a browser. A production start serves nothing, so with no browser the engine process ends once the build does; read the result with extension_build rather than a session."
    • changedInput schema / properties / port / description
      Previous value: -"Server port (0 for auto-assign)"New value: +"Passed to the engine as --port (0 for auto-assign). A production start serves nothing over it today; it matters only to a toolchain that reads it."
  2. Changed2 schema fields changedv10.10.1
    • changedInput schema / properties / browser / enum
      Previous value: -[
      -  "chrome",
      -  "chromium",
      -  "edge",
      -  "brave",
      -  "opera",
      -  "vivaldi",
      -  "yandex",
      -  "firefox",
      -  "waterfox",
      -  "librewolf",
      -  "safari",
      -  "chromium-based",
      -  "gecko-based",
      -  "firefox-based",
      -  "webkit-based"
      -]New value: +[
      +  "chrome",
      +  "chromium",
      +  "edge",
      +  "brave",
      +  "opera",
      +  "vivaldi",
      +  "yandex",
      +  "firefox",
      +  "waterfox",
      +  "librewolf",
      +  "zen",
      +  "floorp",
      +  "safari",
      +  "chromium-based",
      +  "gecko-based",
      +  "firefox-based",
      +  "webkit-based"
      +]
    • addedInput schema / properties / outputPath
      Added value: +{
      +  "description": "An existing unpacked extension directory to launch as it is (a manifest.json at its root), for an artifact built by another toolchain or an exact release candidate. Implies build:false; projectPath still names the project the session belongs to. Relative paths resolve against projectPath.",
      +  "type": "string"
      +}
  3. First observedv10.1.0

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing that there is no HMR and no control channel, enumerating exactly which sibling tools cannot attach (extension_eval, extension_storage, extension_reload, extension_open, extension_dom_snapshot), and explaining that a noBrowser production start ends when the build does.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and free of filler, but the long multi-clause sentence chain is dense. Every clause does convey distinct behavior, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter launch tool with no output schema, the description covers build/serve/launch mechanics, session limitations, and the prebuilt-artifact path, which is everything an agent needs to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 93%, so the baseline is 3, but the description adds cross-parameter behavior: outputPath 'implies build:false' and build:false serves an existing dist or fails when none exists. That relational meaning is not in the schema itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Run the PRODUCTION build in a browser: build the project, serve it, and launch') and explicitly distinguishes itself from the sibling extension_dev, so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use routing ('Use extension_dev while writing code, and this to check what actually ships') plus concrete conditional variants for build:false and outputPath. Alternatives and exclusions are named directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.