We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/codeiva4u/Brave-Real-Browser-Mcp-Server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
name: π Upstream Monitor - Auto Patch & Publish
# Weekly check for new puppeteer-core and playwright-core versions
on:
schedule:
# Every Sunday at 6 AM UTC (11:30 AM IST)
- cron: '0 6 * * 0'
# Manual trigger for testing
workflow_dispatch:
inputs:
force_update:
description: 'π₯ Force update even if versions match'
required: false
default: false
type: boolean
package:
description: 'π¦ Which package to update'
required: false
default: 'both'
type: choice
options:
- both
- puppeteer
- playwright
env:
NODE_VERSION: '20'
jobs:
# ==================== CHECK UPSTREAM VERSIONS ====================
check-versions:
name: π Check Upstream Versions
runs-on: ubuntu-latest
outputs:
puppeteer_update_needed: ${{ steps.check.outputs.puppeteer_update }}
playwright_update_needed: ${{ steps.check.outputs.playwright_update }}
puppeteer_upstream_version: ${{ steps.check.outputs.puppeteer_upstream }}
playwright_upstream_version: ${{ steps.check.outputs.playwright_upstream }}
puppeteer_current_version: ${{ steps.check.outputs.puppeteer_current }}
playwright_current_version: ${{ steps.check.outputs.playwright_current }}
steps:
- name: π₯ Checkout
uses: actions/checkout@v4
with:
token: ${{ secrets.GH_TOKEN || github.token }}
fetch-depth: 0
- name: π’ Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
registry-url: 'https://registry.npmjs.org'
- name: π Check Upstream Versions
id: check
run: |
echo "π Checking upstream versions..."
# Get latest upstream versions from NPM
PUPPETEER_UPSTREAM=$(npm view puppeteer-core version 2>/dev/null || echo "0.0.0")
PLAYWRIGHT_UPSTREAM=$(npm view playwright-core version 2>/dev/null || echo "0.0.0")
echo "π¦ Upstream puppeteer-core: $PUPPETEER_UPSTREAM"
echo "π¦ Upstream playwright-core: $PLAYWRIGHT_UPSTREAM"
# Get basedOn version from local package.json (the actual upstream version we're based on)
# This is stored in package.json under "brave.basedOn.puppeteer-core" or similar
npm install
PUPPETEER_BASED_ON=$(node -p "try { require('./packages/brave-real-puppeteer-core/package.json').brave?.basedOn?.['puppeteer-core'] || '0.0.0' } catch(e) { '0.0.0' }" 2>/dev/null || echo "0.0.0")
PLAYWRIGHT_BASED_ON=$(node -p "try { require('./packages/brave-real-playwright-core/package.json').brave?.basedOn?.['playwright-core'] || '0.0.0' } catch(e) { '0.0.0' }" 2>/dev/null || echo "0.0.0")
echo "π¦ brave-real-puppeteer-core based on: $PUPPETEER_BASED_ON"
echo "π¦ brave-real-playwright-core based on: $PLAYWRIGHT_BASED_ON"
# Compare versions - update needed if upstream is newer than what we're based on
PUPPETEER_UPDATE="false"
PLAYWRIGHT_UPDATE="false"
if [ "$PUPPETEER_UPSTREAM" != "$PUPPETEER_BASED_ON" ]; then
echo "π New puppeteer-core version available: $PUPPETEER_UPSTREAM (current base: $PUPPETEER_BASED_ON)"
PUPPETEER_UPDATE="true"
else
echo "β
puppeteer-core is up to date"
fi
if [ "$PLAYWRIGHT_UPSTREAM" != "$PLAYWRIGHT_BASED_ON" ]; then
echo "π New playwright-core version available: $PLAYWRIGHT_UPSTREAM (current base: $PLAYWRIGHT_BASED_ON)"
PLAYWRIGHT_UPDATE="true"
else
echo "β
playwright-core is up to date"
fi
# Force update if requested
if [ "${{ github.event.inputs.force_update }}" = "true" ]; then
echo "π₯ Force update requested"
if [ "${{ github.event.inputs.package }}" = "puppeteer" ] || [ "${{ github.event.inputs.package }}" = "both" ]; then
PUPPETEER_UPDATE="true"
fi
if [ "${{ github.event.inputs.package }}" = "playwright" ] || [ "${{ github.event.inputs.package }}" = "both" ]; then
PLAYWRIGHT_UPDATE="true"
fi
fi
# Set outputs
echo "puppeteer_update=$PUPPETEER_UPDATE" >> $GITHUB_OUTPUT
echo "playwright_update=$PLAYWRIGHT_UPDATE" >> $GITHUB_OUTPUT
echo "puppeteer_upstream=$PUPPETEER_UPSTREAM" >> $GITHUB_OUTPUT
echo "playwright_upstream=$PLAYWRIGHT_UPSTREAM" >> $GITHUB_OUTPUT
echo "puppeteer_based_on=$PUPPETEER_BASED_ON" >> $GITHUB_OUTPUT
echo "playwright_based_on=$PLAYWRIGHT_BASED_ON" >> $GITHUB_OUTPUT
echo ""
echo "π Summary:"
echo " puppeteer-core: $PUPPETEER_BASED_ON β $PUPPETEER_UPSTREAM (update: $PUPPETEER_UPDATE)"
echo " playwright-core: $PLAYWRIGHT_BASED_ON β $PLAYWRIGHT_UPSTREAM (update: $PLAYWRIGHT_UPDATE)"
# ==================== PATCH PUPPETEER ====================
patch-puppeteer:
name: π§ Patch Puppeteer Core
runs-on: ubuntu-latest
needs: check-versions
if: needs.check-versions.outputs.puppeteer_update_needed == 'true'
steps:
- name: π₯ Checkout
uses: actions/checkout@v4
with:
token: ${{ secrets.GH_TOKEN || github.token }}
fetch-depth: 0
- name: π’ Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
registry-url: 'https://registry.npmjs.org'
- name: βοΈ Configure Git
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
- name: π¦ Install Dependencies
run: npm install
- name: π§ Patch Puppeteer Core
run: |
echo "π§ Patching puppeteer-core ${{ needs.check-versions.outputs.puppeteer_upstream_version }}..."
node scripts/upstream-patcher.js puppeteer ${{ needs.check-versions.outputs.puppeteer_upstream_version }}
- name: π¨ Build Package
run: |
cd packages/brave-real-puppeteer-core
npm run build 2>/dev/null || echo "No build script"
- name: π Publish brave-real-puppeteer-core
run: |
cd packages/brave-real-puppeteer-core
npm publish --access public
echo "β
Published brave-real-puppeteer-core"
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: π Commit Changes
run: |
git add .
git commit -m "π Auto-patch: puppeteer-core ${{ needs.check-versions.outputs.puppeteer_upstream_version }} [skip ci]" || echo "No changes"
git push origin HEAD || echo "Push failed"
# ==================== PATCH PLAYWRIGHT ====================
patch-playwright:
name: π Patch Playwright Core
runs-on: ubuntu-latest
needs: check-versions
if: needs.check-versions.outputs.playwright_update_needed == 'true'
steps:
- name: π₯ Checkout
uses: actions/checkout@v4
with:
token: ${{ secrets.GH_TOKEN || github.token }}
fetch-depth: 0
- name: π’ Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
registry-url: 'https://registry.npmjs.org'
- name: βοΈ Configure Git
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
- name: π¦ Install Dependencies
run: npm install
- name: π Patch Playwright Core
run: |
echo "π Patching playwright-core ${{ needs.check-versions.outputs.playwright_upstream_version }}..."
node scripts/upstream-patcher.js playwright ${{ needs.check-versions.outputs.playwright_upstream_version }}
- name: π¨ Build Package
run: |
cd packages/brave-real-playwright-core
npm run build 2>/dev/null || echo "No build script"
- name: π Publish brave-real-playwright-core
run: |
cd packages/brave-real-playwright-core
npm publish --access public
echo "β
Published brave-real-playwright-core"
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: π Commit Changes
run: |
git add .
git commit -m "π Auto-patch: playwright-core ${{ needs.check-versions.outputs.playwright_upstream_version }} [skip ci]" || echo "No changes"
git push origin HEAD || echo "Push failed"
# ==================== SUMMARY ====================
summary:
name: π Summary
runs-on: ubuntu-latest
needs: [check-versions, patch-puppeteer, patch-playwright]
if: always()
steps:
- name: π Workflow Summary
run: |
echo "## π Upstream Monitor Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### π¦ Version Check Results" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Package | Upstream | Current | Update Needed |" >> $GITHUB_STEP_SUMMARY
echo "|---------|----------|---------|---------------|" >> $GITHUB_STEP_SUMMARY
echo "| puppeteer-core | ${{ needs.check-versions.outputs.puppeteer_upstream_version }} | ${{ needs.check-versions.outputs.puppeteer_current_version }} | ${{ needs.check-versions.outputs.puppeteer_update_needed }} |" >> $GITHUB_STEP_SUMMARY
echo "| playwright-core | ${{ needs.check-versions.outputs.playwright_upstream_version }} | ${{ needs.check-versions.outputs.playwright_current_version }} | ${{ needs.check-versions.outputs.playwright_update_needed }} |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### π§ Patch Results" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Package | Status |" >> $GITHUB_STEP_SUMMARY
echo "|---------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| brave-real-puppeteer-core | ${{ needs.patch-puppeteer.result || 'skipped' }} |" >> $GITHUB_STEP_SUMMARY
echo "| brave-real-playwright-core | ${{ needs.patch-playwright.result || 'skipped' }} |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "---" >> $GITHUB_STEP_SUMMARY
echo "*Weekly upstream check - Every Sunday 6 AM UTC*" >> $GITHUB_STEP_SUMMARY