MCP server for Chrome Web Store extension management and automation
cws-mcp
MCP server for Chrome Web Store extension management. Upload, publish, and manage Chrome extensions directly from Claude Code or any MCP client.
When to Use
Use this MCP when you need to:
- "Upload a new version of my Chrome extension" — build your ZIP and use the
uploadtool to push it as a draft - "Publish my extension to the Chrome Web Store" — use
publishto submit for review and go live - "Check the review status of my extension" — use
statusto see review state, version, and deploy percentage - "Update my extension's metadata (description, screenshots)" — use
update-metadata-uito change store listing details - "Cancel a pending submission" — use
cancelto withdraw a submission under review - "Set up staged rollout for my extension" — use
publishwith staged rollout, thendeploy-percentageto ramp up
Tools
| Tool | Description |
|---|---|
upload |
Upload a ZIP file to Chrome Web Store (update existing item draft) |
publish |
Publish an extension with optional staged rollout, publish type, and skip-review |
status |
Fetch the current status including review state, deploy percentage, and version |
cancel |
Cancel a pending submission |
deploy-percentage |
Set staged rollout percentage (0-100, must exceed current target) |
get |
Read draft/published listing metadata (v1.1 API, deprecated Oct 2026) |
update-metadata |
Update listing metadata via v1.1 API (deprecated Oct 2026) |
update-metadata-ui |
Update listing metadata via dashboard UI automation (Playwright) |
API Coverage
This MCP server covers all Chrome Web Store API v2 endpoints:
| v2 Endpoint | MCP Tool |
|---|---|
media.upload |
upload |
publishers.items.publish |
publish |
publishers.items.fetchStatus |
status |
publishers.items.cancelSubmission |
cancel |
publishers.items.setPublishedDeployPercentage |
deploy-percentage |
Additionally, v1.1 API endpoints are available for metadata operations (get, update-metadata), with dashboard UI automation (update-metadata-ui) as the recommended alternative since v1 is deprecated.
Setup
1. Create OAuth2 Credentials
- Go to Google Cloud Console
- Create a project (or select existing)
- Enable Chrome Web Store API
- Create OAuth2 credentials (Desktop app type)
- Note your Client ID and Client Secret
2. Get Refresh Token
# Open in browser to get authorization code
open "https://accounts.google.com/o/oauth2/auth?response_type=code&scope=https://www.googleapis.com/auth/chromewebstore&client_id=YOUR_CLIENT_ID&redirect_uri=urn:ietf:wg:oauth:2.0:oob"
# Exchange code for refresh token
curl -X POST https://oauth2.googleapis.com/token \
-d "client_id=YOUR_CLIENT_ID" \
-d "client_secret=YOUR_CLIENT_SECRET" \
-d "code=YOUR_AUTH_CODE" \
-d "grant_type=authorization_code" \
-d "redirect_uri=urn:ietf:wg:oauth:2.0:oob"
3. Configure MCP
Add to your Claude Code MCP settings (~/.claude/settings.local.json):
{
"mcpServers": {
"cws-mcp": {
"command": "node",
"args": ["/path/to/cws-mcp/dist/index.js"],
"env": {
"CWS_CLIENT_ID": "xxxxx.apps.googleusercontent.com",
"CWS_CLIENT_SECRET": "GOCSPX-xxxxx",
"CWS_REFRESH_TOKEN": "1//xxxxx",
"CWS_PUBLISHER_ID": "me",
"CWS_ITEM_ID": "your-extension-id"
}
}
}
}
Or install globally via npm:
{
"mcpServers": {
"cws-mcp": {
"command": "npx",
"args": ["-y", "cws-mcp"],
"env": { ... }
}
}
}
Environment Variables
| Variable | Required | Description |
|---|---|---|
CWS_CLIENT_ID |
Yes | Google OAuth2 Client ID |
CWS_CLIENT_SECRET |
Yes | Google OAuth2 Client Secret |
CWS_REFRESH_TOKEN |
Yes | OAuth2 Refresh Token |
CWS_PUBLISHER_ID |
No | Publisher ID (default: me) |
CWS_ITEM_ID |
No | Default extension item ID |
CWS_DASHBOARD_PROFILE_DIR |
No | Browser profile path for UI automation (default: ~/.cws-mcp-profile) |
Usage Examples
Check extension status
Use the cws-mcp status tool
Upload and publish
1. Use cws-mcp upload with zipPath="/path/to/extension.zip"
2. Use cws-mcp publish
Publish with staged rollout
Use cws-mcp publish with:
- publishType="STAGED_PUBLISH"
- deployPercentage=10
Publish with skip-review
Use cws-mcp publish with skipReview=true
Update listing title/description without publishing
Use cws-mcp update-metadata with:
- title="Pexus"
- summary="Official wallet for Plumise"
- description="..."
- category="productivity"
- defaultLocale="en"
Update advanced metadata fields
Use cws-mcp update-m
Tools (8)
uploadUpload a ZIP file to Chrome Web Store to update an existing item draft.publishPublish an extension with optional staged rollout, publish type, and skip-review.statusFetch the current status including review state, deploy percentage, and version.cancelCancel a pending submission.deploy-percentageSet staged rollout percentage (0-100).getRead draft or published listing metadata.update-metadataUpdate listing metadata via v1.1 API.update-metadata-uiUpdate listing metadata via dashboard UI automation using Playwright.Environment Variables
CWS_CLIENT_IDrequiredGoogle OAuth2 Client IDCWS_CLIENT_SECRETrequiredGoogle OAuth2 Client SecretCWS_REFRESH_TOKENrequiredOAuth2 Refresh TokenCWS_PUBLISHER_IDPublisher ID (default: me)CWS_ITEM_IDDefault extension item IDCWS_DASHBOARD_PROFILE_DIRBrowser profile path for UI automationConfiguration
{
"mcpServers": {
"cws-mcp": {
"command": "npx",
"args": ["-y", "cws-mcp"],
"env": {
"CWS_CLIENT_ID": "xxxxx.apps.googleusercontent.com",
"CWS_CLIENT_SECRET": "GOCSPX-xxxxx",
"CWS_REFRESH_TOKEN": "1//xxxxx",
"CWS_PUBLISHER_ID": "me",
"CWS_ITEM_ID": "your-extension-id"
}
}
}
}