real-browser-mcp-server 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/general_issue.yaml +58 -0
- package/.github/SETUP.md +111 -0
- package/.github/workflows/publish.yml +135 -0
- package/Dockerfile +79 -0
- package/LICENSE.md +21 -0
- package/README.md +244 -0
- package/lib/cjs/adblocker.bin +0 -0
- package/lib/cjs/index.js +249 -0
- package/lib/cjs/module/pageController.js +70 -0
- package/lib/cjs/module/turnstile.js +62 -0
- package/lib/esm/adblocker.bin +0 -0
- package/lib/esm/index.mjs +245 -0
- package/lib/esm/module/pageController.mjs +68 -0
- package/lib/esm/module/turnstile.mjs +59 -0
- package/package.json +50 -0
- package/src/ai/action-parser.js +274 -0
- package/src/ai/core.js +378 -0
- package/src/ai/element-finder.js +466 -0
- package/src/ai/index.js +82 -0
- package/src/ai/page-analyzer.js +304 -0
- package/src/ai/selector-healer.js +236 -0
- package/src/index.js +121 -0
- package/src/mcp/handlers.js +5071 -0
- package/src/mcp/index.js +190 -0
- package/src/mcp/server.js +144 -0
- package/src/mcp/tools.js +18 -0
- package/src/shared/tools.js +618 -0
- package/test/cjs/test.js +259 -0
- package/test/esm/package.json +13 -0
- package/test/esm/test.js +226 -0
- package/test/esm/test_option2.js +46 -0
- package/test/esm/test_playwright_ghost.js +30 -0
- package/typings.d.ts +79 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
name: Report Issue
|
|
2
|
+
description: Please use this to report any issue
|
|
3
|
+
labels: [triage]
|
|
4
|
+
assignees:
|
|
5
|
+
- zfcsoftware
|
|
6
|
+
body:
|
|
7
|
+
- type: markdown
|
|
8
|
+
attributes:
|
|
9
|
+
value: |
|
|
10
|
+
Please take care to fill in all fields. Recreating the issue will speed up its resolution. Thank you for contributing to the betterment of the library by reporting issues.
|
|
11
|
+
- type: textarea
|
|
12
|
+
id: issue-detail
|
|
13
|
+
attributes:
|
|
14
|
+
label: Description
|
|
15
|
+
description: Please describe the problem you are experiencing. You only need to provide information about the problem in this field.
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
- type: textarea
|
|
19
|
+
id: issue-recreate
|
|
20
|
+
attributes:
|
|
21
|
+
label: Full steps to reproduce the issue
|
|
22
|
+
description: Please provide a full working code to reproduce the issue. Make sure that the code you provide is directly executable. This step is very important to resolve the issue.
|
|
23
|
+
validations:
|
|
24
|
+
required: true
|
|
25
|
+
- type: dropdown
|
|
26
|
+
id: issue-type
|
|
27
|
+
attributes:
|
|
28
|
+
label: Issue Type
|
|
29
|
+
description: What type of issue would you like to report?
|
|
30
|
+
multiple: true
|
|
31
|
+
options:
|
|
32
|
+
- Bug
|
|
33
|
+
- Build/Install
|
|
34
|
+
- Performance
|
|
35
|
+
- Support
|
|
36
|
+
- Feature Request
|
|
37
|
+
- Documentation Request
|
|
38
|
+
- Others
|
|
39
|
+
- type: dropdown
|
|
40
|
+
id: Operating-System
|
|
41
|
+
attributes:
|
|
42
|
+
label: Operating System
|
|
43
|
+
description: What OS are you seeing the issue in? If you don't see your OS listed, please provide more details in the "Description" section above.
|
|
44
|
+
multiple: true
|
|
45
|
+
options:
|
|
46
|
+
- Windows 10
|
|
47
|
+
- Linux
|
|
48
|
+
- Mac OS
|
|
49
|
+
- Other
|
|
50
|
+
- type: dropdown
|
|
51
|
+
id: use-type
|
|
52
|
+
attributes:
|
|
53
|
+
label: Do you use Docker?
|
|
54
|
+
description: Are you running it with Docker or on your local computer?
|
|
55
|
+
multiple: false
|
|
56
|
+
options:
|
|
57
|
+
- Docker
|
|
58
|
+
- I don't use Docker
|
package/.github/SETUP.md
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# 🔧 GitHub Actions Setup Guide
|
|
2
|
+
|
|
3
|
+
यह गाइड बताएगी कि GitHub Actions workflow को कैसे setup करना है।
|
|
4
|
+
|
|
5
|
+
## 🔐 Required Secrets
|
|
6
|
+
|
|
7
|
+
आपको अपनी GitHub repository में निम्नलिखित secrets को add करना होगा:
|
|
8
|
+
|
|
9
|
+
### 1. GH_TOKEN
|
|
10
|
+
- **Purpose**: Repository access और GitHub releases के लिए
|
|
11
|
+
- **कैसे बनाएं**:
|
|
12
|
+
1. GitHub Settings → Developer settings → Personal access tokens → Tokens (classic)
|
|
13
|
+
2. "Generate new token (classic)" पर click करें
|
|
14
|
+
3. निम्नलिखित permissions select करें:
|
|
15
|
+
- `repo` (Full control of private repositories)
|
|
16
|
+
- `write:packages` (Write packages to GitHub Package Registry)
|
|
17
|
+
- `workflow` (Update GitHub Action workflows)
|
|
18
|
+
4. Token generate करें और copy करें
|
|
19
|
+
|
|
20
|
+
### 2. NPM_TOKEN
|
|
21
|
+
- **Purpose**: NPM पर package publish करने के लिए
|
|
22
|
+
- **कैसे बनाएं**:
|
|
23
|
+
1. NPM website पर login करें (https://www.npmjs.com/)
|
|
24
|
+
2. Profile → Access Tokens → Generate New Token
|
|
25
|
+
3. "Automation" type select करें (recommended for CI/CD)
|
|
26
|
+
4. Token generate करें और copy करें
|
|
27
|
+
|
|
28
|
+
## 🛠️ Secrets को Repository में Add करना
|
|
29
|
+
|
|
30
|
+
1. GitHub repository पर जाएं
|
|
31
|
+
2. Settings → Secrets and variables → Actions
|
|
32
|
+
3. "New repository secret" पर click करें
|
|
33
|
+
4. निम्नलिखित secrets add करें:
|
|
34
|
+
|
|
35
|
+
| Secret Name | Value |
|
|
36
|
+
|-------------|-------|
|
|
37
|
+
| `GH_TOKEN` | आपका GitHub Personal Access Token |
|
|
38
|
+
| `NPM_TOKEN` | आपका NPM Automation Token |
|
|
39
|
+
|
|
40
|
+
## 🚀 Workflow Usage
|
|
41
|
+
|
|
42
|
+
इस project में **2 workflows** हैं:
|
|
43
|
+
|
|
44
|
+
### 1. 🤖 Auto Increment & Publish (Recommended)
|
|
45
|
+
**Simple Auto-Increment**: हमेशा patch version increment करता है
|
|
46
|
+
|
|
47
|
+
#### Automatic Publishing:
|
|
48
|
+
```bash
|
|
49
|
+
# कोई भी change push करें, automatic version increment होगा:
|
|
50
|
+
git commit -m "any change"
|
|
51
|
+
git push origin main # 1.5.0 → 1.5.1 → 1.5.2 → 1.5.3...
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
#### Manual Publishing:
|
|
55
|
+
1. GitHub repository → Actions → "🤖 Auto Increment & Publish"
|
|
56
|
+
2. "Run workflow" click करें
|
|
57
|
+
3. "Publish to NPM?" = `true` रखें
|
|
58
|
+
4. "Run workflow" पर click करें
|
|
59
|
+
|
|
60
|
+
### 2. 🚀 Publish to NPM (Tag-based)
|
|
61
|
+
Traditional tag-based publishing:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# Manual tag push के लिए
|
|
65
|
+
git tag v1.5.1
|
|
66
|
+
git push origin v1.5.1
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## 🔢 Simple Auto-Increment System
|
|
70
|
+
|
|
71
|
+
**Current Version**: `1.5.0`
|
|
72
|
+
|
|
73
|
+
हर workflow run पर automatic patch increment:
|
|
74
|
+
- `1.5.0` → `1.5.1`
|
|
75
|
+
- `1.5.1` → `1.5.2`
|
|
76
|
+
- `1.5.2` → `1.5.3`
|
|
77
|
+
- `1.5.3` → `1.5.4`
|
|
78
|
+
- ... and so on
|
|
79
|
+
|
|
80
|
+
**बिल्कुल simple!** 🚀 कोई complex commit message analysis नहीं चाहिए।
|
|
81
|
+
|
|
82
|
+
## 📋 Workflow Features
|
|
83
|
+
|
|
84
|
+
✅ **Automatic Triggers**: Version tags पर auto-publish
|
|
85
|
+
✅ **Manual Triggers**: GitHub UI से manual control
|
|
86
|
+
✅ **Security**: Secrets का safe उपयोग
|
|
87
|
+
✅ **Testing**: Publish से पहले automated tests
|
|
88
|
+
✅ **Version Management**: Automatic version bumping
|
|
89
|
+
✅ **GitHub Releases**: Auto-generated releases
|
|
90
|
+
✅ **Error Handling**: Comprehensive error reporting
|
|
91
|
+
✅ **Summary Reports**: Detailed workflow summaries
|
|
92
|
+
|
|
93
|
+
## 🔍 Troubleshooting
|
|
94
|
+
|
|
95
|
+
### Common Issues:
|
|
96
|
+
|
|
97
|
+
1. **Token Permissions**:
|
|
98
|
+
- GH_TOKEN में सही permissions हों
|
|
99
|
+
- NPM_TOKEN "Automation" type का हो
|
|
100
|
+
|
|
101
|
+
2. **Repository Access**:
|
|
102
|
+
- Repository में Actions enabled हों
|
|
103
|
+
- Secrets properly configured हों
|
|
104
|
+
|
|
105
|
+
3. **Publishing Errors**:
|
|
106
|
+
- Package name conflicts check करें
|
|
107
|
+
- NPM account verified हो
|
|
108
|
+
|
|
109
|
+
## 📞 Support
|
|
110
|
+
|
|
111
|
+
अगर कोई issue आए तो GitHub Issues में report करें।
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
name: 🚀 Build, Version & Publish to NPM
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, master]
|
|
6
|
+
paths-ignore:
|
|
7
|
+
- 'README.md'
|
|
8
|
+
- 'docs/**'
|
|
9
|
+
- '*.md'
|
|
10
|
+
- 'LICENSE.md'
|
|
11
|
+
- '.gitignore'
|
|
12
|
+
|
|
13
|
+
workflow_dispatch:
|
|
14
|
+
inputs:
|
|
15
|
+
increment_type:
|
|
16
|
+
description: '📈 Version increment type'
|
|
17
|
+
required: true
|
|
18
|
+
default: 'patch'
|
|
19
|
+
type: choice
|
|
20
|
+
options:
|
|
21
|
+
- patch
|
|
22
|
+
- minor
|
|
23
|
+
- major
|
|
24
|
+
dry_run:
|
|
25
|
+
description: '🧪 Dry run (check build/test without publishing to NPM)'
|
|
26
|
+
required: false
|
|
27
|
+
default: false
|
|
28
|
+
type: boolean
|
|
29
|
+
|
|
30
|
+
jobs:
|
|
31
|
+
publish:
|
|
32
|
+
name: 🚀 Publish to NPM
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
permissions:
|
|
35
|
+
contents: write
|
|
36
|
+
id-token: write
|
|
37
|
+
|
|
38
|
+
steps:
|
|
39
|
+
- name: 📥 Checkout Repository
|
|
40
|
+
uses: actions/checkout@v4
|
|
41
|
+
with:
|
|
42
|
+
fetch-depth: 0
|
|
43
|
+
token: ${{ secrets.GH_TOKEN || github.token }}
|
|
44
|
+
|
|
45
|
+
- name: 🟢 Setup Node.js
|
|
46
|
+
uses: actions/setup-node@v4
|
|
47
|
+
with:
|
|
48
|
+
node-version: '20'
|
|
49
|
+
registry-url: 'https://registry.npmjs.org'
|
|
50
|
+
|
|
51
|
+
- name: ⚙️ Configure Git
|
|
52
|
+
run: |
|
|
53
|
+
git config --global user.name "github-actions[bot]"
|
|
54
|
+
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
55
|
+
|
|
56
|
+
- name: 📦 Install Dependencies
|
|
57
|
+
run: npm ci || npm install
|
|
58
|
+
|
|
59
|
+
- name: 🧪 Pre-Publish Verification
|
|
60
|
+
run: |
|
|
61
|
+
echo "💡 Running basic syntax and file checks..."
|
|
62
|
+
node -c lib/cjs/index.js
|
|
63
|
+
node -c lib/esm/index.mjs
|
|
64
|
+
echo "✅ Code syntax is valid."
|
|
65
|
+
|
|
66
|
+
- name: 📈 Increment Version
|
|
67
|
+
id: versioning
|
|
68
|
+
run: |
|
|
69
|
+
# Determine the increment type (major, minor, or patch)
|
|
70
|
+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
|
71
|
+
INCREMENT_TYPE="${{ github.event.inputs.increment_type }}"
|
|
72
|
+
else
|
|
73
|
+
COMMIT_MSG=$(git log -1 --pretty=%B)
|
|
74
|
+
if echo "$COMMIT_MSG" | grep -qE "\[major\]|BREAKING CHANGE"; then
|
|
75
|
+
INCREMENT_TYPE="major"
|
|
76
|
+
elif echo "$COMMIT_MSG" | grep -qE "\[minor\]|feat:"; then
|
|
77
|
+
INCREMENT_TYPE="minor"
|
|
78
|
+
else
|
|
79
|
+
INCREMENT_TYPE="patch"
|
|
80
|
+
fi
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
echo "📈 Selected increment type: $INCREMENT_TYPE"
|
|
84
|
+
|
|
85
|
+
# Bump version, commit changes and create tag
|
|
86
|
+
npm version $INCREMENT_TYPE -m "🔖 Release: v%s [skip ci]"
|
|
87
|
+
|
|
88
|
+
# Capture new version for subsequent steps
|
|
89
|
+
NEW_VERSION=$(node -p "require('./package.json').version")
|
|
90
|
+
echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV
|
|
91
|
+
echo "version=v$NEW_VERSION" >> $GITHUB_OUTPUT
|
|
92
|
+
|
|
93
|
+
- name: 🚀 Push Version Bump & Tag
|
|
94
|
+
if: github.event.inputs.dry_run != 'true'
|
|
95
|
+
run: |
|
|
96
|
+
git push origin HEAD --follow-tags
|
|
97
|
+
|
|
98
|
+
- name: 📦 Publish Package to NPM
|
|
99
|
+
if: github.event.inputs.dry_run != 'true'
|
|
100
|
+
run: |
|
|
101
|
+
npm publish --access public
|
|
102
|
+
env:
|
|
103
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
104
|
+
|
|
105
|
+
- name: 📋 Create GitHub Release
|
|
106
|
+
if: github.event.inputs.dry_run != 'true'
|
|
107
|
+
run: |
|
|
108
|
+
TAG="v${{ env.NEW_VERSION }}"
|
|
109
|
+
|
|
110
|
+
cat > release_body.md << EOF
|
|
111
|
+
## 🚀 Real Browser MCP Server v${{ env.NEW_VERSION }}
|
|
112
|
+
|
|
113
|
+
### 📦 Published Packages
|
|
114
|
+
- **NPM Package**: [real-browser-mcp-server](https://www.npmjs.com/package/real-browser-mcp-server)
|
|
115
|
+
- **Stealth automation**: Powered by Patchright (undetected Playwright fork).
|
|
116
|
+
|
|
117
|
+
### 🛠️ Key Capabilities
|
|
118
|
+
* **Turnstile Bypass**: Solves Cloudflare Turnstile automatically.
|
|
119
|
+
* **Ad Blocker**: Integrated `@ghostery/adblocker-playwright` with binary caching.
|
|
120
|
+
* **Stealth Evasion**: Passes advanced bot checkers like CreepJS, Datadome, Pixelscan, and FingerprintJS.
|
|
121
|
+
|
|
122
|
+
### 📥 Installation
|
|
123
|
+
\`\`\`bash
|
|
124
|
+
npm install real-browser-mcp-server@${{ env.NEW_VERSION }}
|
|
125
|
+
\`\`\`
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
*Auto-generated with ❤️ by GitHub Actions*
|
|
129
|
+
EOF
|
|
130
|
+
|
|
131
|
+
gh release create "$TAG" \
|
|
132
|
+
--title "Release $TAG" \
|
|
133
|
+
--notes-file release_body.md
|
|
134
|
+
env:
|
|
135
|
+
GITHUB_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
|
package/Dockerfile
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Stage 1: Build
|
|
2
|
+
FROM node:20-slim AS builder
|
|
3
|
+
|
|
4
|
+
WORKDIR /app
|
|
5
|
+
|
|
6
|
+
# Copy package files first for better caching
|
|
7
|
+
COPY package*.json ./
|
|
8
|
+
|
|
9
|
+
# Install all dependencies (including devDependencies for build)
|
|
10
|
+
RUN npm ci
|
|
11
|
+
|
|
12
|
+
# Copy source files
|
|
13
|
+
COPY . .
|
|
14
|
+
|
|
15
|
+
# Stage 2: Production
|
|
16
|
+
FROM node:20-slim AS production
|
|
17
|
+
|
|
18
|
+
# Install Chromium and required dependencies
|
|
19
|
+
RUN apt-get update && apt-get install -y \
|
|
20
|
+
wget \
|
|
21
|
+
gnupg \
|
|
22
|
+
ca-certificates \
|
|
23
|
+
apt-transport-https \
|
|
24
|
+
chromium \
|
|
25
|
+
fonts-liberation \
|
|
26
|
+
libasound2 \
|
|
27
|
+
libatk-bridge2.0-0 \
|
|
28
|
+
libatk1.0-0 \
|
|
29
|
+
libcups2 \
|
|
30
|
+
libdbus-1-3 \
|
|
31
|
+
libdrm2 \
|
|
32
|
+
libgbm1 \
|
|
33
|
+
libgtk-3-0 \
|
|
34
|
+
libnspr4 \
|
|
35
|
+
libnss3 \
|
|
36
|
+
libxcomposite1 \
|
|
37
|
+
libxdamage1 \
|
|
38
|
+
libxfixes3 \
|
|
39
|
+
libxkbcommon0 \
|
|
40
|
+
libxrandr2 \
|
|
41
|
+
xdg-utils \
|
|
42
|
+
xvfb \
|
|
43
|
+
&& rm -rf /var/lib/apt/lists/* \
|
|
44
|
+
&& apt-get clean
|
|
45
|
+
|
|
46
|
+
# Set Chrome binary path
|
|
47
|
+
ENV CHROME_BIN=/usr/bin/chromium
|
|
48
|
+
|
|
49
|
+
# Create non-root user for security
|
|
50
|
+
RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \
|
|
51
|
+
&& mkdir -p /home/pptruser/Downloads \
|
|
52
|
+
&& chown -R pptruser:pptruser /home/pptruser
|
|
53
|
+
|
|
54
|
+
WORKDIR /app
|
|
55
|
+
|
|
56
|
+
# Copy from builder stage
|
|
57
|
+
COPY --from=builder /app/node_modules ./node_modules
|
|
58
|
+
COPY --from=builder /app/package*.json ./
|
|
59
|
+
COPY --from=builder /app/lib ./lib
|
|
60
|
+
COPY --from=builder /app/test ./test
|
|
61
|
+
COPY --from=builder /app/packages ./packages
|
|
62
|
+
COPY --from=builder /app/typings.d.ts ./
|
|
63
|
+
|
|
64
|
+
# Set ownership to non-root user
|
|
65
|
+
RUN chown -R pptruser:pptruser /app
|
|
66
|
+
|
|
67
|
+
# Switch to non-root user
|
|
68
|
+
USER pptruser
|
|
69
|
+
|
|
70
|
+
# Set headless mode for container
|
|
71
|
+
ENV HEADLESS=true
|
|
72
|
+
ENV NODE_ENV=production
|
|
73
|
+
|
|
74
|
+
# Health check
|
|
75
|
+
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
76
|
+
CMD node -e "console.log('OK')" || exit 1
|
|
77
|
+
|
|
78
|
+
# Default command: run CJS tests
|
|
79
|
+
CMD ["npm", "run", "cjs_test"]
|
package/LICENSE.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 - 2024 @zfcsoftware
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
# 🦁 Real Browser MCP Server
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/real-browser-mcp-server)
|
|
4
|
+
[](https://nodejs.org/)
|
|
5
|
+
[](https://github.com/codeiva4u/Brave-Real-Browser-Mcp-Server/actions/workflows/publish.yml)
|
|
6
|
+
[](https://opensource.org/licenses/ISC)
|
|
7
|
+
|
|
8
|
+
A production-ready **Model Context Protocol (MCP)** server that equips AI agents with a fully undetected, high-stealth web browser. Built on **Patchright** (the advanced undetected Playwright fork) and integrated with **Ghostery Adblocker**, **Ghost Cursor** (human-like mouse dynamics), and an automatic **Cloudflare Turnstile bypass**.
|
|
9
|
+
|
|
10
|
+
This server is **100% compatible with all major AI IDEs** (Cursor, VS Code, Cline, Roo Code, Windsurf, PearAI, OpenCode, and Claude Desktop) using standard **STDIO** communication.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 🚀 Key Evasion & Stealth Features
|
|
15
|
+
|
|
16
|
+
* **Undetected Browser Engine**: Powered by **Patchright Chromium**, bypassing modern fingerprinting checks (does not expose automation indicators or Webdriver/BiDi flags).
|
|
17
|
+
* **Integrated Ad & Tracker Blocker**: Utilizes `@ghostery/adblocker-playwright` with asynchronous pre-compiled filter caching to `adblocker.bin`, blocking ads and speed-bumps completely offline.
|
|
18
|
+
* **Human-like Interactions**: Integrates **playwright-ghost** (Bézier curves auto-hooking) to transparently simulate human mouse movements, velocity, and natural hover-before-click behaviors.
|
|
19
|
+
* **Turnstile Auto-Solver**: Seamlessly detects and bypasses Cloudflare Turnstile widgets.
|
|
20
|
+
* **Anti-Race Condition Guards**: Robust state-guards ensure popup blockers, shims, and adblockers attach exactly once per page, preventing context destruction.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 🛠️ AI IDE Compatibility & Configuration Guide
|
|
25
|
+
|
|
26
|
+
Since this server adheres strictly to the official Model Context Protocol (MCP) specification over **STDIO** (with all informational logging directed safely to `stderr` to avoid JSON-RPC corruption), it is fully compatible with every modern AI editor.
|
|
27
|
+
|
|
28
|
+
### 1. Claude Desktop
|
|
29
|
+
Add the following to your `claude_desktop_config.json`:
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"mcpServers": {
|
|
34
|
+
"real-browser-mcp-server": {
|
|
35
|
+
"command": "node",
|
|
36
|
+
"args": [
|
|
37
|
+
"c:/Users/Admin/Desktop/Software/Real-Browser-Mcp-Server/src/index.js"
|
|
38
|
+
],
|
|
39
|
+
"env": {
|
|
40
|
+
"HEADLESS": "false"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 2. Cursor IDE
|
|
48
|
+
1. Open Cursor Settings ➔ **Features** ➔ **MCP**.
|
|
49
|
+
2. Click **+ Add New MCP Server**.
|
|
50
|
+
3. Configure as follows:
|
|
51
|
+
* **Name**: `real-browser-mcp-server`
|
|
52
|
+
* **Type**: `command`
|
|
53
|
+
* **Command**: `node c:/Users/Admin/Desktop/Software/Real-Browser-Mcp-Server/src/index.js`
|
|
54
|
+
4. Click **Save**.
|
|
55
|
+
|
|
56
|
+
### 3. Cline / Roo Code (VS Code)
|
|
57
|
+
Add the server entry to your global MCP settings file (typically found at `%APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json`):
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"mcpServers": {
|
|
62
|
+
"real-browser-mcp-server": {
|
|
63
|
+
"command": "node",
|
|
64
|
+
"args": [
|
|
65
|
+
"c:/Users/Admin/Desktop/Software/Real-Browser-Mcp-Server/src/index.js"
|
|
66
|
+
],
|
|
67
|
+
"env": {
|
|
68
|
+
"HEADLESS": "false"
|
|
69
|
+
},
|
|
70
|
+
"disabled": false
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 4. Windsurf IDE
|
|
77
|
+
Configure the server in your `~/.codeium/windsurf/mcp_config.json`:
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"mcpServers": {
|
|
82
|
+
"real-browser-mcp-server": {
|
|
83
|
+
"command": "node",
|
|
84
|
+
"args": [
|
|
85
|
+
"c:/Users/Admin/Desktop/Software/Real-Browser-Mcp-Server/src/index.js"
|
|
86
|
+
],
|
|
87
|
+
"env": {
|
|
88
|
+
"HEADLESS": "false"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 5. PearAI
|
|
96
|
+
Add the configurations via **PearAI Settings** ➔ **MCP Servers** using the standard `command` configuration pointing to `node` and the path to `src/index.js`.
|
|
97
|
+
|
|
98
|
+
### 6. OpenCode AI IDE
|
|
99
|
+
Configure the server in your `opencode.jsonc` or standard MCP settings configuration:
|
|
100
|
+
|
|
101
|
+
```jsonc
|
|
102
|
+
{
|
|
103
|
+
"mcpServers": {
|
|
104
|
+
"real-browser-mcp-server": {
|
|
105
|
+
"command": "node",
|
|
106
|
+
"args": [
|
|
107
|
+
"c:/Users/Admin/Desktop/Software/Real-Browser-Mcp-Server/src/index.js"
|
|
108
|
+
],
|
|
109
|
+
"env": {
|
|
110
|
+
"HEADLESS": "false"
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 🌐 Complete MCP Tool Reference (22 Tools)
|
|
120
|
+
|
|
121
|
+
The server exposes 22 highly optimized tools categorized into functional units:
|
|
122
|
+
|
|
123
|
+
### 🌐 Browser & Session
|
|
124
|
+
| Tool Name | Description | Parameters |
|
|
125
|
+
|:---|:---|:---|
|
|
126
|
+
| `browser_init` | Initialize Brave/Patchright browser with stealth, ad blocker, and turnstile bypass. | `headless` (boolean), `proxy` (object) |
|
|
127
|
+
| `browser_close` | Close browser with cleanup and session saving. | None |
|
|
128
|
+
| `cookie_manager` | Smart cookie management (get, set, delete, import, export). | `action` (string), `cookies` (array) |
|
|
129
|
+
|
|
130
|
+
### 🧭 Navigation
|
|
131
|
+
| Tool Name | Description | Parameters |
|
|
132
|
+
|:---|:---|:---|
|
|
133
|
+
| `navigate` | Navigate to URL with smart retry and configurable wait strategy. | `url` (string), `waitStrategy` (string) |
|
|
134
|
+
|
|
135
|
+
### 👆 Human-like Interaction
|
|
136
|
+
| Tool Name | Description | Parameters |
|
|
137
|
+
|:---|:---|:---|
|
|
138
|
+
| `click` | Human-like click using AI healing, ghost cursor, and iframe support. | `selector` (string), `hoverFirst` (boolean) |
|
|
139
|
+
| `type` | Type text with human speed variation, smart clearing, and iframe support. | `selector` (string), `text` (string) |
|
|
140
|
+
| `solve_captcha` | Auto-solve CAPTCHAs (Turnstile, reCAPTCHA, hCaptcha, OCR). | `selector` (string) |
|
|
141
|
+
| `random_scroll` | Simulated human scrolling with natural patterns and lazy-load triggers. | `direction` (string), `amount` (number) |
|
|
142
|
+
| `press_key` | Press keyboard keys with modifier key support (Ctrl/Shift/Alt). | `key` (string), `modifiers` (array) |
|
|
143
|
+
| `execute_js` | Run custom asynchronous/synchronous JavaScript inside a page or iframe. | `code` (string), `iframeIndex` (number) |
|
|
144
|
+
|
|
145
|
+
### 📄 Extraction & Obfuscation Decoding
|
|
146
|
+
| Tool Name | Description | Parameters |
|
|
147
|
+
|:---|:---|:---|
|
|
148
|
+
| `get_content` | Retrieve page content in `html`, `text`, `markdown`, or direct `rawHttp` modes. | `format` (string) |
|
|
149
|
+
| `find_element` | Locate elements via CSS selectors, XPath, or exact text with selector healing. | `selector` (string), `strategy` (string) |
|
|
150
|
+
| `save_content_as_markdown` | Export current page content as clean, readable Markdown, stripping ads. | `filename` (string) |
|
|
151
|
+
| `extract_data` | Advanced 8-mode extractor (Regex, JSON, Meta tags, JS Deobfuscator, Cryptography). | `mode` (string), `target` (string) |
|
|
152
|
+
| `link_harvester` | Scrapes all visible, hidden, iframe-nested, or encoded links on a page. | None |
|
|
153
|
+
| `media_extractor` | Capture and control HLS, DASH, JWPlayer, Plyr, or dynamic streaming content. | `action` (string), `targetUrl` (string) |
|
|
154
|
+
|
|
155
|
+
### 📡 Network & Utilities
|
|
156
|
+
| Tool Name | Description | Parameters |
|
|
157
|
+
|:---|:---|:---|
|
|
158
|
+
| `redirect_tracer` | Trace complete redirect chains (HTTP 301/302, JS location, meta refresh). | `url` (string) |
|
|
159
|
+
| `network_recorder` | Capture network requests, XHR request/response bodies, or WebSockets. | `action` (string), `captureXhrBody` (boolean) |
|
|
160
|
+
| `file_downloader` | Secure file downloader supporting resumes, batches, and URL decoding. | `url` (string), `outputPath` (string) |
|
|
161
|
+
| `deep_analysis` | Detailed analysis of DOM structure, scripts, anti-bots, and stack. | None |
|
|
162
|
+
| `wait` | Smart delay with AI prediction or static timeout. | `duration` (number) |
|
|
163
|
+
| `progress_tracker` | Track running automation progress with AI-estimated remaining times. | `step` (string), `percentage` (number) |
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## 📈 Evasion Performance & Test Coverage
|
|
168
|
+
|
|
169
|
+
Our test suites run headless/headed simulations against all major fingerprinting and bot checking platforms with a **100% Pass Rate**:
|
|
170
|
+
|
|
171
|
+
| Target Test Platform | Detection Type | Status |
|
|
172
|
+
|:---|:---|:---|
|
|
173
|
+
| **DrissionPage Detector** | Bot / Automation framework detection | ✅ Pass |
|
|
174
|
+
| **Sannysoft WebDriver** | WebDriver/navigator properties check | ✅ Pass |
|
|
175
|
+
| **Cloudflare WAF** | Web Application Firewall challenge | ✅ Pass |
|
|
176
|
+
| **Cloudflare Turnstile** | Advanced CAPTCHA widget solver | ✅ Pass |
|
|
177
|
+
| **FingerprintJS Bot Detector** | Fingerprint-based bot detection | ✅ Pass |
|
|
178
|
+
| **Datadome Bot Detector** | Dynamic behavioral detection | ✅ Pass |
|
|
179
|
+
| **reCAPTCHA v3 Score** | Google Trust Score test (Passed with > 0.9) | ✅ Pass |
|
|
180
|
+
| **CreepJS Fingerprinting** | Advanced trust rating and fingerprint check | ✅ Pass |
|
|
181
|
+
| **Pixelscan Fingerprint** | Masque & Canvas fingerprint masking check | ✅ Pass (No Masking Detected) |
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 💻 Programmatic Usage (Node.js SDK)
|
|
186
|
+
|
|
187
|
+
You can also use the core browser connector directly in your custom Node.js scripts.
|
|
188
|
+
|
|
189
|
+
### CommonJS
|
|
190
|
+
```javascript
|
|
191
|
+
const { connect } = require('real-browser-mcp-server');
|
|
192
|
+
|
|
193
|
+
(async () => {
|
|
194
|
+
const { browser, page } = await connect({
|
|
195
|
+
headless: false,
|
|
196
|
+
turnstile: true
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
await page.goto('https://example.com');
|
|
200
|
+
|
|
201
|
+
// Real mouse movement and click
|
|
202
|
+
await page.realClick('#my-button');
|
|
203
|
+
|
|
204
|
+
await browser.close();
|
|
205
|
+
})();
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### ESM (ECMAScript Modules)
|
|
209
|
+
```javascript
|
|
210
|
+
import { connect } from 'real-browser-mcp-server';
|
|
211
|
+
|
|
212
|
+
const { browser, page } = await connect({
|
|
213
|
+
headless: false,
|
|
214
|
+
turnstile: true
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
await page.goto('https://example.com');
|
|
218
|
+
await page.realClick('#my-button');
|
|
219
|
+
await browser.close();
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## ⌨️ NPM Script Commands
|
|
225
|
+
|
|
226
|
+
Run these scripts from the project root directory:
|
|
227
|
+
|
|
228
|
+
| Command | Description |
|
|
229
|
+
|:---|:---|
|
|
230
|
+
| `npm start` | Start the MCP server using standard STDIO transport. |
|
|
231
|
+
| `npm run dev` | Alias to start the MCP server. |
|
|
232
|
+
| `npm run mcp` | Start the MCP server. |
|
|
233
|
+
| `npm run mcp:verbose` | Start the MCP server with verbose logging on `stderr`. |
|
|
234
|
+
| `npm run list` | Clean list of all 22 tools with emojis and categories. |
|
|
235
|
+
| `npm run build` | Validate workspace structure and confirm library status. |
|
|
236
|
+
| `npm test` | Execute the full test suite (CJS & ESM). |
|
|
237
|
+
| `npm run cjs_test` | Run CommonJS test scripts. |
|
|
238
|
+
| `npm run esm_test` | Run ECMAScript Module test scripts. |
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 🛡️ License
|
|
243
|
+
|
|
244
|
+
This project is licensed under the **ISC License**. Created and maintained with ❤️ by [codeiva4u](https://github.com/codeiva4u).
|
|
Binary file
|