@extension.dev/mcp 5.2.0 → 5.3.1
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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +78 -0
- package/dist/module.js +914 -443
- package/dist/src/__tests__/setup-session-dir.d.ts +1 -0
- package/dist/src/lib/process-manager.d.ts +2 -0
- package/dist/src/lib/registry.d.ts +72 -0
- package/dist/src/lib/session-browser.d.ts +6 -0
- package/dist/src/lib/validate-input.d.ts +6 -1
- package/dist/src/tools/dev.d.ts +6 -0
- package/dist/src/tools/release-list.d.ts +22 -0
- package/dist/src/tools/stop.d.ts +10 -0
- package/package.json +2 -2
- package/server.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { ProcessInfo } from "./types";
|
|
2
|
+
export declare function removeSessionMarker(projectPath: string, browser: string): void;
|
|
3
|
+
export declare function listSessionMarkers(): ProcessInfo[];
|
|
2
4
|
export declare function registerSession(info: ProcessInfo): void;
|
|
3
5
|
export declare function getSession(projectPath: string, browser: string): ProcessInfo | undefined;
|
|
4
6
|
export declare function removeSession(projectPath: string, browser: string): void;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export declare const REGISTRY_BASE_DEFAULT = "https://registry.extension.land";
|
|
2
|
+
export declare const CONSOLE_BASE = "https://console.extension.dev";
|
|
3
|
+
export declare function registryBase(): string;
|
|
4
|
+
export interface ProjectRef {
|
|
5
|
+
workspace: string;
|
|
6
|
+
project: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Resolve which project registry reads should target: explicit overrides
|
|
10
|
+
* first, then the stored login's workspace/project slugs. Returns null when
|
|
11
|
+
* neither names a project (e.g. token came from EXTENSION_DEV_TOKEN and no
|
|
12
|
+
* login was ever stored).
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveProjectRef(overrides?: {
|
|
15
|
+
workspace?: string;
|
|
16
|
+
project?: string;
|
|
17
|
+
}): ProjectRef | null;
|
|
18
|
+
/** URL of a file under the project's `_extension-dev/` registry directory. */
|
|
19
|
+
export declare function registryFileUrl(ref: ProjectRef, file: string): string;
|
|
20
|
+
/** Console page URL for the project (builds, releases/new, stores, ...). */
|
|
21
|
+
export declare function consoleProjectUrl(ref: ProjectRef | null, page: string): string;
|
|
22
|
+
export type RegistryFetchResult<T> = {
|
|
23
|
+
ok: true;
|
|
24
|
+
json: T;
|
|
25
|
+
} | {
|
|
26
|
+
ok: false;
|
|
27
|
+
status?: number;
|
|
28
|
+
message: string;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Fetch a registry JSON file. Never throws: 404s (private or never-built
|
|
32
|
+
* projects), network failures, and non-JSON bodies all come back as
|
|
33
|
+
* `{ok:false}` so callers can degrade honestly instead of crashing the verb.
|
|
34
|
+
*/
|
|
35
|
+
export declare function fetchRegistryJson<T = unknown>(url: string, fetchImpl?: typeof fetch): Promise<RegistryFetchResult<T>>;
|
|
36
|
+
export interface ChannelEntry {
|
|
37
|
+
channel: string;
|
|
38
|
+
sha: string;
|
|
39
|
+
buildId?: string;
|
|
40
|
+
version?: string;
|
|
41
|
+
/** ISO timestamp parsed from the channel row when the writer recorded one. */
|
|
42
|
+
promotedAt?: string;
|
|
43
|
+
description?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Normalize the registry's channels.json (a map of channel -> row) into a
|
|
47
|
+
* list. `promotedAt` is not a first-class field in the file today; the
|
|
48
|
+
* promote workflow stamps it into the description ("Promoted from X on
|
|
49
|
+
* <ISO>"), so it is parsed back out when present.
|
|
50
|
+
*/
|
|
51
|
+
export declare function parseChannels(json: unknown): ChannelEntry[];
|
|
52
|
+
export interface BuildIndexItem {
|
|
53
|
+
sha: string;
|
|
54
|
+
commit?: string;
|
|
55
|
+
channel?: string;
|
|
56
|
+
buildEnv?: string;
|
|
57
|
+
status?: string;
|
|
58
|
+
version?: string;
|
|
59
|
+
message?: string;
|
|
60
|
+
timestamp?: string;
|
|
61
|
+
browsers?: string[];
|
|
62
|
+
}
|
|
63
|
+
/** Normalize `_extension-dev/builds/index.json` items (schemaVersion 3). */
|
|
64
|
+
export declare function parseBuildIndex(json: unknown): BuildIndexItem[];
|
|
65
|
+
/**
|
|
66
|
+
* Derive the project mirror repo's Actions URL from any GitHub run URL the
|
|
67
|
+
* registry exposes (stores/status.json carries one from the mirror's own
|
|
68
|
+
* runs: https://github.com/extensiondev/<ownerGithubId>--<projectId>/actions/
|
|
69
|
+
* runs/<id>). Only trusts the extensiondev org so a user-source-repo run URL
|
|
70
|
+
* (build.json's runUrl) is never mistaken for the mirror.
|
|
71
|
+
*/
|
|
72
|
+
export declare function mirrorActionsUrlFromRunUrl(runUrl: unknown): string | null;
|
|
@@ -3,6 +3,12 @@ export interface ResolvedBrowser {
|
|
|
3
3
|
source: "explicit" | "session" | "contract" | "stale" | "fallback";
|
|
4
4
|
}
|
|
5
5
|
export declare function knownSessionBrowsers(projectPath: string): string[];
|
|
6
|
+
export interface LiveSession {
|
|
7
|
+
browser: string;
|
|
8
|
+
pid: number;
|
|
9
|
+
source: "registry" | "contract";
|
|
10
|
+
}
|
|
11
|
+
export declare function liveProjectSessions(projectPath: string): LiveSession[];
|
|
6
12
|
export declare function deadReadySession(projectPath: string): {
|
|
7
13
|
browser: string;
|
|
8
14
|
pid: number;
|
|
@@ -4,4 +4,9 @@ export interface InputIssue {
|
|
|
4
4
|
}
|
|
5
5
|
export declare function normalizeArgAliases(inputSchema: Record<string, unknown>, args: Record<string, unknown>): Record<string, unknown>;
|
|
6
6
|
export declare function validateToolInput(inputSchema: Record<string, unknown>, args: Record<string, unknown>): InputIssue[];
|
|
7
|
-
export declare function
|
|
7
|
+
export declare function describeToolArgs(inputSchema: Record<string, unknown>): {
|
|
8
|
+
required: string[];
|
|
9
|
+
optional: string[];
|
|
10
|
+
aliases: Record<string, string[]>;
|
|
11
|
+
};
|
|
12
|
+
export declare function inputValidationError(toolName: string, issues: InputIssue[], inputSchema?: Record<string, unknown>): string;
|
package/dist/src/tools/dev.d.ts
CHANGED
|
@@ -5,6 +5,11 @@ export declare const schema: {
|
|
|
5
5
|
inputSchema: {
|
|
6
6
|
type: "object";
|
|
7
7
|
properties: {
|
|
8
|
+
replace: {
|
|
9
|
+
type: string;
|
|
10
|
+
default: boolean;
|
|
11
|
+
description: string;
|
|
12
|
+
};
|
|
8
13
|
allowControl: {
|
|
9
14
|
type: string;
|
|
10
15
|
default: boolean;
|
|
@@ -79,6 +84,7 @@ export declare function handler(args: {
|
|
|
79
84
|
port?: number;
|
|
80
85
|
noBrowser?: boolean;
|
|
81
86
|
polyfill?: boolean;
|
|
87
|
+
replace?: boolean;
|
|
82
88
|
allowControl?: boolean;
|
|
83
89
|
allowEval?: boolean;
|
|
84
90
|
} & LaunchFlagArgs): Promise<string>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare const schema: {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
inputSchema: {
|
|
5
|
+
type: "object";
|
|
6
|
+
properties: {
|
|
7
|
+
workspace: {
|
|
8
|
+
type: string;
|
|
9
|
+
description: string;
|
|
10
|
+
};
|
|
11
|
+
project: {
|
|
12
|
+
type: string;
|
|
13
|
+
description: string;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
required: never[];
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export declare function handler(args: {
|
|
20
|
+
workspace?: string;
|
|
21
|
+
project?: string;
|
|
22
|
+
}): Promise<string>;
|
package/dist/src/tools/stop.d.ts
CHANGED
|
@@ -21,8 +21,18 @@ export declare const schema: {
|
|
|
21
21
|
required: never[];
|
|
22
22
|
};
|
|
23
23
|
};
|
|
24
|
+
interface StopOutcome {
|
|
25
|
+
projectPath: string;
|
|
26
|
+
browser: string;
|
|
27
|
+
pid: number | null;
|
|
28
|
+
stopped: boolean;
|
|
29
|
+
reaped: number[];
|
|
30
|
+
detail: string;
|
|
31
|
+
}
|
|
32
|
+
export declare function stopOne(projectPath: string, browser: string): Promise<StopOutcome>;
|
|
24
33
|
export declare function handler(args: {
|
|
25
34
|
projectPath?: string;
|
|
26
35
|
browser?: string;
|
|
27
36
|
all?: boolean;
|
|
28
37
|
}): Promise<string>;
|
|
38
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@extension.dev/mcp",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.
|
|
5
|
-
"description": "MCP server that lets AI agents (Claude Code, Claude Desktop, Cursor, Copilot, Codex) build, run, inspect, and publish browser extensions.
|
|
4
|
+
"version": "5.3.1",
|
|
5
|
+
"description": "MCP server that lets AI agents (Claude Code, Claude Desktop, Cursor, Copilot, Codex) build, run, inspect, and publish browser extensions. 32 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": "MIT",
|
|
8
8
|
"author": {
|
package/server.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
|
|
3
3
|
"name": "io.github.extensiondev/mcp",
|
|
4
|
-
"description": "Build, run, inspect, and publish browser extensions from any MCP client.
|
|
4
|
+
"description": "Build, run, inspect, and publish browser extensions from any MCP client. 32 tools, 11 browsers.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"url": "https://github.com/extensiondev/mcp",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
9
|
"websiteUrl": "https://extension.dev",
|
|
10
|
-
"version": "5.
|
|
10
|
+
"version": "5.3.1",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
15
15
|
"identifier": "@extension.dev/mcp",
|
|
16
|
-
"version": "5.
|
|
16
|
+
"version": "5.3.1",
|
|
17
17
|
"runtimeHint": "npx",
|
|
18
18
|
"transport": {
|
|
19
19
|
"type": "stdio"
|