@extension.dev/mcp 10.8.0 → 10.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,7 +10,7 @@
10
10
  "name": "extension-mcp",
11
11
  "source": "./",
12
12
  "description": "MCP tools for browser extension development: scaffold from 50+ templates, run the dev server with HMR, inspect the live DOM and logs, and publish store-ready builds for Chrome, Edge, and Firefox.",
13
- "version": "10.8.0",
13
+ "version": "10.9.0",
14
14
  "category": "development",
15
15
  "author": {
16
16
  "name": "Cezar Augusto"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "extension-mcp",
3
3
  "description": "MCP tools for browser extension development: scaffold from 50+ templates, run the dev server with HMR, inspect the live DOM and logs, and publish store-ready builds for Chrome, Edge, and Firefox. Ships /extension, /extension-add, /extension-debug, and /extension-publish commands.",
4
- "version": "10.8.0",
4
+ "version": "10.9.0",
5
5
  "author": {
6
6
  "name": "Cezar Augusto",
7
7
  "email": "hello@extension.dev",
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 10.9.0
4
+
5
+ The client ran its browser work through CLI packages pinned three minor
6
+ releases back, so an agent driving the MCP got 4.0.30's behavior while the
7
+ same person running `extension` on their own machine got 4.1.2's. Every fix
8
+ shipped in between reached the terminal and stopped at the MCP.
9
+
10
+ - `extension-create`, `extension-develop` and `extension-install` move from
11
+ 4.0.30 to 4.1.2. The browser, logging and install paths the MCP tools call
12
+ into now behave the way the documented CLI does.
13
+ - No tool surface changes: the same tools take the same inputs and answer the
14
+ same shapes.
15
+
3
16
  ## 10.8.0
4
17
 
5
18
  Some MCP actions change what a public channel serves or hand something to a
package/dist/module.js CHANGED
@@ -222,7 +222,7 @@ __webpack_require__.d(wait_namespaceObject, {
222
222
  handler: ()=>wait_handler,
223
223
  schema: ()=>wait_schema
224
224
  });
225
- var package_namespaceObject = JSON.parse('{"rE":"10.8.0","El":{"OP":"4.0.30"}}');
225
+ var package_namespaceObject = JSON.parse('{"rE":"10.9.0","El":{"OP":"4.1.2"}}');
226
226
  const ENVELOPE_SCHEMA = 1;
227
227
  const collectWarnings = (warnings)=>{
228
228
  if (!warnings) return [];
@@ -950,7 +950,7 @@ async function readJson(url, res) {
950
950
  }
951
951
  }
952
952
  async function readRefusal(res) {
953
- let text = "";
953
+ let text;
954
954
  try {
955
955
  text = await res.text();
956
956
  } catch {
@@ -960,7 +960,7 @@ async function readRefusal(res) {
960
960
  code: ""
961
961
  };
962
962
  }
963
- let body = null;
963
+ let body;
964
964
  try {
965
965
  body = JSON.parse(text);
966
966
  } catch {
@@ -5843,7 +5843,7 @@ async function openSurfaceAsTab(projectPath, browser, surface) {
5843
5843
  const doc = surfaceDocument(projectPath, browser, surface);
5844
5844
  if (!doc) return missingSurfaceError(projectPath, browser, surface, "so there is no page to render as a tab");
5845
5845
  let url;
5846
- let extensionId = null;
5846
+ let extensionId;
5847
5847
  if (isChromiumFamily(browser)) {
5848
5848
  extensionId = await resolveExtensionId(projectPath, browser);
5849
5849
  if (!extensionId) return envelope_envelope({
@@ -6163,7 +6163,7 @@ function parseArtifactRef(input) {
6163
6163
  const raw = String(input ?? "").trim();
6164
6164
  if (!raw) return null;
6165
6165
  if (ARTIFACT_ID.test(raw)) return raw;
6166
- let parsed = null;
6166
+ let parsed;
6167
6167
  try {
6168
6168
  parsed = new URL(raw);
6169
6169
  } catch {
@@ -7028,7 +7028,7 @@ async function preview_web_handler(args) {
7028
7028
  distDir
7029
7029
  }
7030
7030
  });
7031
- let manifest = {};
7031
+ let manifest;
7032
7032
  try {
7033
7033
  manifest = JSON.parse(node_fs.readFileSync(manifestPath, "utf8"));
7034
7034
  } catch (err) {
@@ -14967,7 +14967,7 @@ const tools = [
14967
14967
  doctor_namespaceObject
14968
14968
  ];
14969
14969
  function toolResultFrame(result) {
14970
- let refused = false;
14970
+ let refused;
14971
14971
  try {
14972
14972
  const parsed = JSON.parse(result);
14973
14973
  refused = isEnvelope(parsed) && false === parsed.ok;
@@ -15093,7 +15093,7 @@ async function runCli(cmd, args) {
15093
15093
  api: flag("api")
15094
15094
  });
15095
15095
  log(out);
15096
- let parsed = null;
15096
+ let parsed;
15097
15097
  try {
15098
15098
  parsed = JSON.parse(out);
15099
15099
  } catch {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@extension.dev/mcp",
3
3
  "type": "module",
4
- "version": "10.8.0",
4
+ "version": "10.9.0",
5
5
  "description": "MCP server that lets AI agents (Claude Code, Claude Desktop, Cursor, Copilot, Codex) build, run, inspect, and publish browser extensions. 30 tools for scaffolding, live DOM inspection, log streaming, and store-ready builds across Chrome, Edge, Firefox, Safari, and every Chromium- or Gecko-based browser (Brave, Opera, Vivaldi, Yandex, Waterfox, LibreWolf). Powered by extension.dev and Extension.js.",
6
6
  "mcpName": "io.github.extensiondev/mcp",
7
7
  "license": "Apache-2.0",
@@ -50,6 +50,7 @@
50
50
  "compile": "rslib build",
51
51
  "build": "pnpm run compile",
52
52
  "start": "node bin/extension-mcp.js",
53
+ "lint": "eslint .",
53
54
  "test": "vitest run",
54
55
  "typecheck": "tsc --noEmit && tsc --noEmit -p src/__tests__/tsconfig.json",
55
56
  "prepack": "node scripts/readme-logo-width.mjs npm",
@@ -90,17 +91,21 @@
90
91
  "@modelcontextprotocol/sdk": "^1.12.1",
91
92
  "browser-extension-manifest-fields": "^2.2.9",
92
93
  "cross-spawn": "^7.0.6",
93
- "extension-create": "4.0.30",
94
- "extension-develop": "4.0.30",
95
- "extension-install": "4.0.30",
94
+ "extension-create": "4.1.2",
95
+ "extension-develop": "4.1.2",
96
+ "extension-install": "4.1.2",
96
97
  "ws": "^8.20.0"
97
98
  },
98
99
  "devDependencies": {
100
+ "@eslint/js": "^10.0.1",
99
101
  "@rslib/core": "^0.19.4",
100
102
  "@types/cross-spawn": "^6.0.6",
101
103
  "@types/node": "^25.2.0",
102
104
  "@types/ws": "^8.18.1",
105
+ "eslint": "^10.7.0",
106
+ "globals": "^17.7.0",
103
107
  "typescript": "6.0.2",
108
+ "typescript-eslint": "^8.64.0",
104
109
  "vite": "^8.1.5",
105
110
  "vitest": "^4.1.3"
106
111
  },
package/server.json CHANGED
@@ -7,13 +7,13 @@
7
7
  "source": "github"
8
8
  },
9
9
  "websiteUrl": "https://extension.dev",
10
- "version": "10.8.0",
10
+ "version": "10.9.0",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "registryBaseUrl": "https://registry.npmjs.org",
15
15
  "identifier": "@extension.dev/mcp",
16
- "version": "10.8.0",
16
+ "version": "10.9.0",
17
17
  "runtimeHint": "npx",
18
18
  "transport": {
19
19
  "type": "stdio"