npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

cws-mcp

v1.4.2

Published

MCP server for Chrome Web Store extension management

Readme

cws-mcp

npm version

한국어

MCP Badge

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 upload tool to push it as a draft
  • "Publish my extension to the Chrome Web Store" — use publish to submit for review and go live
  • "Check the review status of my extension" — use status to see review state, version, and deploy percentage
  • "Update my extension's metadata (description, screenshots)" — use update-metadata-ui to change store listing details
  • "Cancel a pending submission" — use cancel to withdraw a submission under review
  • "Set up staged rollout for my extension" — use publish with staged rollout, then deploy-percentage to 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

  1. Go to Google Cloud Console
  2. Create a project (or select existing)
  3. Enable Chrome Web Store API
  4. Create OAuth2 credentials (Desktop app type)
  5. 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-metadata with metadata={
  "homepageUrl": "https://plumise.com",
  "supportUrl": "https://plug.plumise.com/docs"
}

When API metadata updates don't reflect

Use cws-mcp update-metadata-ui with:
- title
- summary
- description
- category
- homepageUrl
- supportUrl

Notes:

  • This tool automates the Chrome Web Store dashboard UI.
  • First run with headless=false if login is required.
  • Browser profile path defaults to ~/.cws-mcp-profile (override with CWS_DASHBOARD_PROFILE_DIR).

Staged rollout

1. Use cws-mcp publish
2. Use cws-mcp deploy-percentage with percentage=10
3. Use cws-mcp deploy-percentage with percentage=50
4. Use cws-mcp deploy-percentage with percentage=100

Note: deploy-percentage is only available for extensions with 10,000+ seven-day active users. The new percentage must always be higher than the current target.

V1 API Deprecation

The get and update-metadata tools use the Chrome Web Store v1.1 API, which is deprecated and will be removed after October 15, 2026. The v2 API does not provide metadata read/write endpoints, so these tools remain available as a bridge. Use update-metadata-ui (Playwright dashboard automation) as the long-term alternative.

License

MIT