extension_release_promote
Promote a built extension to a release channel (stable, preview, beta, …) on extension.dev, headless.
Quick start
Promote build 3f2a1c to the beta channel
How the agent uses it
This WRITES: action:'promote' (the default) points channel at buildId, action:'cut' opens a release pull request in the project's source repository that bumps the manifest version (level patch, minor or major, or an exact version; optionally armed to release to channel when merged, with releaseNotes in its body), and action:'rollback' returns channel to the build it served before. A promote needs a token minted by a workspace owner and a workspace owner's approval of that exact promote, every time; cut and rollback need a workspace owner's approval of the exact act too. For all three the first call runs the platform's checks and either refuses with the reason and the next step, asking nobody, or answers approval-required with the approval URL and the platform's own description of the act; once approved, the same call with approvalId runs it once. It is auth-gated by your stored login (extension_auth) or a release token in EXTENSION_DEV_TOKEN, minted and revoked under project settings, Access tokens. Tokens live at most 7 days, so CI must re-mint before expiry. The project comes from the token; with several logins stored, project picks which one. Call extension_release_status to find a valid buildId. The status is 'promoted' only when the platform says every asked browser's release was dispatched and the channel pointer moved; 'promoted-partially' lists in its warnings what did not happen (a browser whose dispatch failed, a channel pointer that was not moved) and must not be repeated whole; 'promote-unconfirmed' means the platform's answer did not carry the result, so read extension_release_status before promoting again.
Reference
| Group | platform, on with --features=local,platform (private alpha) |
| Tier | Platform |
| Needs | the server started with --features=local,platform, and a login; cut and rollback need a workspace owner's approval |
| Read only | no |
| Destructive | yes |
| Idempotent | no |
| Reaches the open web | yes |
Inputs
| Input | Type | Required | Default | What it does |
|---|---|---|---|---|
action | "promote" | "cut" | "rollback" | no | "promote" | promote (the default) points channel at buildId; cut opens a release pull request that bumps the manifest version; rollback returns channel to the build it served before. |
project | string | no | Which stored login to use, as '<workspace>/<project>' (or a project slug that matches one login), when extension_auth has signed in to more than one project on this machine. Omitted, the most recent login is used, after EXTENSION_DEV_TOKEN when that is set. Named, it outranks EXTENSION_DEV_TOKEN. extension_auth (action: status) lists the stored logins. | |
buildId | string | no | Build commit SHA to promote (a 7-char short SHA is fine) | |
channel | string | no | Target release channel, e.g. stable, preview, beta. With cut, the channel the pull request releases to when merged (optional); with rollback, the channel to roll back. | |
level | "patch" | "minor" | "major" | no | With cut, how far to bump the manifest version (default patch). A version, when passed, decides the bump instead. | |
sourceChannel | string | no | Channel to promote from (optional; inferred otherwise) | |
browsers | array of string | no | Browsers to release. Optional: when omitted the platform reads the build's browsers from its index, and falls back to chrome alone when that index cannot be read, so pass them to be sure. | |
version | string | no | Version label for the release (optional). With cut, the exact manifest version to bump to, above the current one. | |
releaseNotes | string | no | Release notes markdown (optional). With cut, the notes written into the pull request body. | |
approvalId | string | no | The approval handle returned by a prior approval-required response. Promoting changes what a public channel serves and is not reversible in place, so every promote needs a workspace owner's approval: call once without this to get an approval id and URL, have a human approve at extension.dev, then call again with the same id. | |
api | string | no | Platform base URL (default EXTENSION_DEV_API_URL, else https://www.extension.dev) |
When it fails
- The tool is missing from the client's list. Start the server with
--features=local,platform; see Platform tools. - The platform refuses the call. Log in first with
extension_auth. - The answer reads
status: "platform-held". extension.dev is not open to the public yet, so nothing ran on its machines. Creating, running and building an extension still work on your machine; see Use the platform from your agent. - The answer reads
status: "approval-required". The act needs a person's approval. Open the approval URL in the answer, approve it, then call again with the same arguments and theapprovalId. - The approval is refused as
ApprovalExpired. An approval lasts 15 minutes. Call again with noapprovalIdto ask for a fresh one. - The approval is refused as
ApprovalConsumed. An approval runs its act once, and the call that spent it may already have run. Read the current state first, then ask again only if the act did not happen. - The approval is refused as
ApprovalScopeMismatch. It covers a different act, or the arguments changed since it was approved. Call again with noapprovalId. - A rollback is refused with
NO_ROLLBACK_TARGET. The channel has served no earlier build. Promote another build to it instead. - A cut is refused with
NO_SOURCE_REPO. The project has no source repository to open a pull request in. Connect one in the console's project settings. - A cut or a rollback answers
status: "needs-owner". Both need a login approved by a workspace owner. Ask a workspace owner to sign in withextension_authand run it, or make the change in the console. - The answer depends on the network. This tool reaches the open web, so a refusal can be the network, not the project.
Next
- MCP server: install, the two groups and the session gates
- Install in your client
extension_auth: Sign this machine in to extension.dev, report that login, or clear it.extension_builds: Read, rebuild and configure the platform's builds of the logged-in project on extension.dev.extension_preview_web: Preview an in-progress extension in the web emulator, with no real browser.extension_project_create: Create an extension.dev project for an extension that does not have one yet, without opening the console.extension_publish: Publish the project your stored token is scoped to (extension_auth, or EXTENSION_DEV_TOKEN) to extension.dev, and return its shareable URL.extension_release_status: Read where a project stands on extension.dev, from the public registry (registry.extension.land).extension_shares: List, create and revoke the public preview links this token has shared, which is what extension_preview_web share:true hands out.extension_submit: Submit a built extension for store REVIEW through extension.dev, which holds your store credentials and dispatches from your project's mirror CI: the Chrome Web Store, Firefox A...extension_workspace: Read the extension.dev workspace a stored login belongs to: its plan and limits, its projects, and its usage.extension_workspace_create: Create an extension.dev workspace that does not exist yet, without opening the console.