Install
$ agentstack add skill-pencil20388-eng-browser-automation-skills-chrome-devtools-mcp-adspower ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ● Shell / process execution Used
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Chrome DevTools MCP + AdsPower Integration Skill
Connect Google's Chrome DevTools MCP to AdsPower antidetect browser profiles. This lets AI coding agents (Claude Code, Cursor, Codex CLI) control fingerprint-isolated browser sessions through natural language.
Why This Combination
- Chrome DevTools MCP gives AI agents eyes in the browser: inspect DOM, monitor network, run JavaScript, take screenshots
- AdsPower gives each browser session a unique fingerprint, proxy, and identity
- Together: your AI agent can operate across multiple isolated browser identities — each with its own fingerprint, cookies, and IP address
Claude Code → Chrome DevTools MCP → AdsPower Profile (unique fingerprint + proxy)
→ AdsPower Profile (unique fingerprint + proxy)
→ AdsPower Profile (unique fingerprint + proxy)
How It Works
AdsPower's Local API opens browser profiles and exposes a Chrome DevTools Protocol (CDP) endpoint for each one. Chrome DevTools MCP connects to that endpoint via --browserUrl.
Prerequisites
- AdsPower installed and running (paid plan with API access)
- Chrome DevTools MCP installed (
npm install -g chrome-devtools-mcp@latest) - API Key generated (AdsPower → Automation → API → Generate)
- Python 3.8+ with
requestsinstalled
Step 1: Open an AdsPower Profile and Get the CDP Endpoint
import requests
API_KEY = "your_api_key"
BASE_URL = "http://local.adspower.net:50325"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
PROFILE_ID = "your_profile_id"
# Open the browser profile
resp = requests.get(
f"{BASE_URL}/api/v1/browser/start?user_id={PROFILE_ID}",
headers=HEADERS,
timeout=30,
).json()
if resp["code"] == 0:
# This is the CDP WebSocket endpoint
ws_endpoint = resp["data"]["ws"]["puppeteer"]
debug_port = ws_endpoint.split(":")[2].split("/")[0]
print(f"CDP WebSocket: {ws_endpoint}")
print(f"Debug port: {debug_port}")
else:
print(f"Error: {resp['msg']}")
The ws_endpoint looks like: ws://127.0.0.1:XXXXX/devtools/browser/GUID
Step 2: Connect Chrome DevTools MCP to the AdsPower Profile
Once the profile is open and you have the debug port, connect Chrome DevTools MCP:
# Connect to the AdsPower browser instance
npx chrome-devtools-mcp@latest --browserUrl=http://127.0.0.1:XXXXX
Replace XXXXX with the actual port from Step 1.
Configure in Claude Code
Add to your MCP config (.claude/mcp.json or settings.json):
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": [
"-y",
"chrome-devtools-mcp@latest",
"--browserUrl=http://127.0.0.1:XXXXX"
]
}
}
}
Step 3: Use Natural Language to Control the Browser
Once connected, you can tell your AI agent:
> Navigate to amazon.com and check if the account is still logged in
> Take a screenshot of the current page
> Check the network requests for any blocked or failed calls
> Run document.title in the browser console and tell me what page this is
> Inspect the fingerprint by visiting browserscan.net
The AI agent sees the browser through Chrome DevTools MCP, while AdsPower ensures the browser has a unique fingerprint and proxy.
Automating Multiple Profiles
To work across multiple AdsPower profiles sequentially:
import requests
import subprocess
import time
API_KEY = "your_api_key"
BASE_URL = "http://local.adspower.net:50325"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
def get_profiles(group_name):
resp = requests.get(
f"{BASE_URL}/api/v1/user/list",
headers=HEADERS,
params={"group_name": group_name, "page": 1, "page_size": 100},
).json()
return resp["data"]["list"]
def open_profile(profile_id):
resp = requests.get(
f"{BASE_URL}/api/v1/browser/start?user_id={profile_id}",
headers=HEADERS,
timeout=30,
).json()
if resp["code"] == 0:
ws = resp["data"]["ws"]["puppeteer"]
port = ws.split(":")[2].split("/")[0]
return port
return None
def close_profile(profile_id):
requests.get(
f"{BASE_URL}/api/v1/browser/stop?user_id={profile_id}",
headers=HEADERS,
)
# Process each profile
profiles = get_profiles("My Campaign")
for p in profiles:
port = open_profile(p["user_id"])
if port:
print(f"Profile {p['name']} ready on port {port}")
print(f"Connect MCP: npx chrome-devtools-mcp@latest --browserUrl=http://127.0.0.1:{port}")
# Your automation here...
input("Press Enter when done with this profile...")
close_profile(p["user_id"])
time.sleep(2)
Use Cases
| Scenario | What happens | |---|---| | Multi-account health check | Open each profile → MCP checks login status, screenshots dashboard | | Ad verification | Open profiles with different geo proxies → MCP inspects ad content per region | | Fingerprint auditing | Open profiles → MCP navigates to BrowserScan → reads fingerprint results | | Authenticated scraping | Open profile with saved cookies → MCP extracts data from logged-in pages | | A/B test across identities | Open multiple profiles → MCP captures different UI versions |
Important Notes
- Each AdsPower profile exposes its own CDP port — you can only connect one MCP instance per profile at a time
- Close the MCP connection before closing the AdsPower profile to avoid orphaned processes
- The CDP port changes every time a profile is opened — always read it fresh from the API response
- AdsPower handles fingerprint and proxy; Chrome DevTools MCP handles browser control and inspection
- Rate limit: wait 1-2 seconds between opening/closing profiles
Resources
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: pencil20388-eng
- Source: pencil20388-eng/browser-automation-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.