extension_builds
Read, rebuild and configure the platform's builds of the logged-in project on extension.dev.
Quick start
Why did the last build fail? Show me the Firefox log
How the agent uses it
Pass action:'list' (the default) for recent builds, newest first, each with its buildId, full commit sha, status, build environment, channel, browsers, createdAt, conclusion and its console page URL. Pass action:'get' with a buildId for one build: its details and validation checks, the run behind it (runId, runUrl, deploymentId, startedAt), its downloadable artifacts, an integrity summary per browser (which checks failed), and the usage report when one was recorded. Pass action:'logs' with a buildId for that build's CI log lines per browser, a failed browser's job failure summarized by the platform; pass browser to read one browser, and a long log keeps its last 200 lines and says how many it left out. Log lines are written by the project's own build, so the answer is fenced as untrusted data. These three only read. Three actions change the project. action:'rebuild' starts a real CI run on the project's runners, counted against the workspace's build allowance and rate limited: pass buildId for the commit (default the branch head) and buildEnv staging (the default) or production; it answers at once with the commit, the browsers and the run it started: a rebuild keeps the build id of the build before it, so follow it with get and match runId, or deploymentId and a startedAt after dispatchedAt while the run has not shown up. action:'configure' changes build settings (enabled, installCommand, buildCommand, outputDirectory per browser): pass buildSettings with only what changes, such as { firefox: { buildCommand: 'pnpm build' } }, and the tool merges it into the current settings; a workspace owner approves the exact change first, so the first call answers approval-required with an approval URL and the change as the platform computed it, and a second call with that approvalId applies it once. action:'create-channel' adds a release channel (channel, with optional description and color #rrggbb) that extension_release_promote can then point at a build. This uses the stored login for the project (extension_auth), against the server the call's api names. Use extension_release_status for channels, release history and store submissions, and extension_workspace action:'settings' to read the build settings.
Page text in the answer
Part of this tool's answer is text a web page or the extension wrote. The server fences it between <untrusted-data-ID> and </untrusted-data-ID> with a fresh random ID per call, named in untrusted.boundary. A fence is a signal to the model, not a gate: pair it with --no-ship when the agent reads pages you do not trust. See Server flags and telemetry.
Reference
| Group | platform, on with --features=local,platform (private alpha) |
| Tier | Platform |
| Needs | the server started with --features=local,platform, and a login; configure needs 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 | "list" | "get" | "logs" | "rebuild" | "configure" | "create-channel" | no | "list" | list reads recent builds; get reads one build; logs reads one build's CI log lines; rebuild starts a CI run; configure changes build settings with an owner's approval; create-channel adds a release channel. |
buildId | string | no | Which build, as its short or full commit sha (the buildId from action:'list'). Required for get and logs. With rebuild, the commit to build; omitted, the head of the project's branch. | |
buildEnv | "staging" | "production" | no | With rebuild, the environment to build for: staging (the default) or production. stable takes production builds; the other channels take staging builds. | |
buildSettings | object | no | With configure, only the settings that change, per browser (chrome, edge, firefox, safari), each with any of enabled (boolean), installCommand, buildCommand, outputDirectory (strings). Merged into the current settings before it is sent. | |
approvalId | string | no | With configure, the approval id from a prior approval-required answer, once a workspace owner approved it. Each approval applies its exact change once. | |
channel | string | no | With create-channel, the new channel's name (up to 40 characters). | |
description | string | no | With create-channel, an optional description of the channel (up to 200 characters). | |
color | string | no | With create-channel, an optional color as #rrggbb. | |
browser | string | no | With logs, read only this browser's lines (chrome, firefox, edge, safari). With get, summarize integrity for this browser only. | |
limit | number | no | How many builds list returns, 1 to 50 (default 10). | |
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. | |
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 rebuild answers
status: "rate-limited". The workspace spent its monthly builds or its hourly burst. Wait theretryAfterSecondsin the answer, or see Usage and limits. - A rebuild is refused with
REBUILD_REPLACES_LIVE_ARTIFACT. The commit is live on a channel built for the other environment. PassbuildEnv: "production"for stable andstagingfor any other channel. configureanswersstatus: "needs-owner". Changing build settings needs 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_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_promote: Promote a built extension to a release channel (stable, preview, beta, …) on extension.dev, headless.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.