Purpose
cws-mcp is an MCP (Model Context Protocol) server for managing Chrome Web Store extensions from Claude Code or any MCP client. Typical uses include: uploading a new version of an extension as a draft, submitting it for review and publishing it, checking an extension's review status and version information, updating an extension's description or category, canceling a submission under review, and setting up staged rollouts for an extension and gradually increasing the deployment percentage.
Main capabilities
The server covers all endpoints of the Chrome Web Store API v2. All API requests use v2. The available operation directions include:
- Status queries: view review status, version, and deployment percentage.
- Upload and publish: upload a built ZIP as a draft; submit it for review and publish it; it can also be published with a skip-review option.
- Staged rollout: use publish to configure a staged rollout, then gradually increase the deployment percentage via deploy-percentage.
- Cancel submission: withdraw a submission that is under review.
- Metadata updates: read or save store listing fields (without submitting for review).
Note that the public API has no read/write endpoints for store listing copy, so the dashboard-related tools use Playwright and a separate logged-in Chrome profile to operate. Saving store listing fields never submits for review. Missing fields, mismatched categories, and unconfirmed saves return errors rather than success.
How to use
- Create OAuth2 credentials: go to Google Cloud Console, create or select a project, enable the Chrome Web Store API, create OAuth2 credentials (desktop app type), and record the Client ID and Client Secret.
- Obtain a refresh token: follow Google's OAuth flow for desktop apps, using a local loopback redirect URI, PKCE, and the scope https://www.googleapis.com/auth/chromewebstore。请求离线访问(access_type=offline;需要新的 When refreshing the token, use prompt=consent). Exchange the authorization code using the same redirect URI, and save the refresh token in the MCP client's key/environment settings. Google no longer supports the old copy-and-paste OOB redirect.
- Configure MCP: add it to Claude Code's MCP settings (~/.claude/settings.local.json), or install it globally via npm.
Regarding environment variables, the material mentions: STAGED_PUBLISH is used to hold off publishing after approval (it is not a rollout percentage; the rollout percentage should use deployPercentage separately); configuration items whose default value is false are kept consistent with the API; even if publishing succeeds, you should check the returned warningInfo.warnings. The dashboard browser profile path defaults to ~/.cws-mcp-profile, and can be overridden with CWS_DASHBOARD_PROFILE_DIR. If login is required on first run, use headless=false.
Applicable scenarios
- Need to directly complete Chrome extension version upload, review submission, and status tracking in a conversational MCP client.
- Need to gradually roll out an extension in a staged manner.
- Need to use Playwright to operate the dashboard to read or save store listing copy drafts without triggering review submission.
- Need to cancel an erroneously submitted review request.
Limitations
- The dashboard tool reads/saves the current dashboard draft, not the published store listing copy or an arbitrary locale; please first select the target localization in the dashboard, and it will fail safely when fields are ambiguous.
- category must exactly match the option label visible in the current dashboard language; the material states that English and Korean field labels are supported.
- The title, summary, and default locale need to be modified in manifest.json / localized messages, rebuilt, and the ZIP uploaded; for icons and screenshots, please use dashboard operations directly.
- storeIconPath is no longer accepted as a usable upload method; the previously generic file input method could not verify which asset was changed, so please upload icons in the developer dashboard.
- Google Chrome must be installed. Dashboard UI changes may require updating selectors; unverified saves will return errors. When encountering unclearfailures, please check the dashboard first before retrying.
- deploy-percentage applies only to extensions with 10,000+ active users over the past seven days, and the new percentage must always be higher than the current target.
- Migrating from 1.x to 2.0: Google will shut down API v1 on October 15, 2026; 2.0 no longer calls it. get now returns v2 status, and its old projection parameter will be rejected; please use get-metadata-ui to get draft store listing copy; published store listing copy is not exposed through v2. update-metadata now uses the same dashboard workflow as update-metadata-ui, so it requires Chrome login, not just an API token. Bare metadata, title, summary, and defaultLocale inputs will be rejected with guidance; unsupported inputs will not be silently ignored.