AdsPower 官方 MCP Server 深度测评:用自然语言控制指纹浏览器自动化
本文转载自 51CTO 博客作者「大鹏AI教育」的原创文章《AdsPower 官方 MCP Server 深度测评:用自然语言控制指纹浏览器自动化》,原文链接:https://blog.51cto.com/u_12805695/14592040
大家好,我是张大鹏,AI量化 / AI全栈开发从业者,也是 InsMatrixAutomation(Instagram 矩阵自动化)项目的负责人。
在上一篇文章《用AI-Agent控制浏览器——MCP协议让指纹浏览器成为Agent的工具》里,我深入探讨了 MCP 协议如何打通 AI Agent 与指纹浏览器的协作通道。文章发布后,很多朋友问我:有没有哪家指纹浏览器厂商直接提供 MCP Server,不需要自己写适配层?
好问题。答案是:有,AdsPower 官方直接提供了 MCP Server。
今天这篇文章,我就把 AdsPower 官方 MCP Server 完整跑一遍,从安装、配置到实战操作,全部实操记录。全文可运行代码,零保留。
什么是 AdsPower MCP Server
官方定义
AdsPower MCP Server 是 AdsPower 官方开源的 TypeScript 项目,托管在 GitHub AdsPower/adspower-browser。它将 AdsPower Local API 的能力封装成 MCP 协议工具,AI 编码助手(如 Claude Code、Cursor、OpenClaw)可以直接调用,无需自己写 API 适配层。
核心能力一览

它与自建适配层的核心区别

环境准备
前置条件
在开始之前,请确保你已安装:
- AdsPower 客户端(V2.4.1 及以上): 下载地址
- Node.js 18+:MCP Server 使用 TypeScript 开发,需要 Node.js 运行环境
- AI 编码助手:本文以 OpenClaw 为例,Claude Code / Cursor 操作方式类似
获取 API Key
- 打开 AdsPower 客户端 → 点击右上角头像
- 进入设置 → **interface settings
- 找到 API Key,点击复制
注意:API Key 等同于你的账户凭证,请勿泄露或提交到公开代码仓库。
确认 Local API 端口
AdsPower Local API 默认端口为 50325,可通过客户端设置或启动参数修改。如果本机端口被占用,可以手动指定:
# 方式一:环境变量
export PORT=50325
# 方式二:启动参数(需在 AdsPower 客户端设置)
# --port=50325
安装 AdsPower MCP Server
方式一:通过 OpenClaw 安装(推荐)
如果你使用 OpenClaw 作为 AI 编码助手,安装 MCP Server 只需一行命令:
npx clawhub@latest install adspower-browser --force
OpenClaw 会自动下载并配置 MCP Server,无需手动管理路径。
方式二:独立 CLI 安装
如果你希望独立使用 AdsPower CLI 工具:
npm install -g adspower-browser
# 验证安装
ads --version
方式三:源码构建(适合二次开发)
git clone https://github.com/AdsPower/adspower-browser.git
cd adspower-browser
pnpm install
pnpm run build
构建完成后,MCP Server 入口文件位于:
packages/local-api-mcp/build/index.js
在 AI 编码助手的 MCP 配置中直接指向这个路径即可。

MCP Server 配置到 OpenClaw
配置步骤

在 OpenClaw 中添加 AdsPower MCP Server 非常简单。首先打开 OpenClaw 的配置文件,在 mcpServers 节点下添加如下配置,将 50325 替换为你的 API 端口,你的API密钥 替换为第三章获取的真实密钥:
# 格式
claude mcp add adspower-local-api \
-e PORT="50325" \
-e API_KEY="你的API密钥" \
-- npx -y local-api-mcp-typescript
配置完成后,OpenClaw 会自动加载 MCP 工具,无需重启。
验证连接
在 OpenClaw 中执行:
/ads get-browser-list
如果返回浏览器配置文件列表(JSON 格式),说明连接成功:
{
"code": 0,
"data": [
{
"user_id": "h1yynkm",
"group_id": "0",
"name": "Instagram账号01",
"serial_number": "INS001"
}
],
"msg": "success"
}
如果返回连接超时错误,检查:
- AdsPower 客户端是否正在运行
- API 端口(默认 50325)是否被防火墙阻止
- API Key 是否正确
实战:自然语言控制浏览器环境
MCP Server 配置好后,所有 Local API 的能力都可以通过自然语言调用。以下是几个高频场景。
查询所有浏览器环境
自然语言指令:
帮我查一下 AdsPower 里有哪些浏览器环境
背后调用的 API:GET /api/v1/user/list
返回示例:
{
"code": 0,
"data": {
"list": [
{
"user_id": "h1yynkm",
"group_id": "0",
"name": "Instagram账号01",
"serial_number": "INS001",
"account_name": "ins_matrix_01",
"password": "******",
"cookie": "",
"status": "Idle"
}
],
"page_count": 1,
"total": 1
}
}
创建新的浏览器环境
自然语言指令:
创建一个新的浏览器环境,名称是"测试环境01",分组ID是0,代理类型是HTTP,代理地址是 192.168.1.100,端口是 8080
背后调用的 API:POST /api/v1/user/create
请求示例:
curl -X POST 'http://local.adspower.net:50325/api/v1/user/create' \
-H 'Content-Type: application/json' \
-d '{
"name": "测试环境01",
"group_id": "0",
"user_proxy_config": {
"proxy_type": "http",
"proxy_host": "192.168.1.100",
"proxy_port": "8080"
}
}'
返回示例:
{
"code": 0,
"data": {
"user_id": "abc12345"
},
"msg": "success"
}
启动浏览器并获取自动化接入点
自然语言指令:
启动 user_id 为 h1yynkm 的浏览器,获取 Selenium 接入地址
背后调用的 API:GET /api/v1/browser/start
Python 完整接入代码:
import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
# ⚠️ 安全提示:请勿将 API_KEY 直接硬编码在代码中,建议使用环境变量或配置文件
API_KEY = "你的API密钥" # 建议改为 os.getenv("ADSPOWER_API_KEY")
USER_ID = "h1yynkm"
BASE_URL = "http://local.adspower.net:50325"
def start_browser(user_id: str, api_key: str) -> dict:
"""通过 AdsPower API 启动浏览器,返回接入信息"""
url = f"{BASE_URL}/api/v1/browser/start"
params = {"user_id": user_id, "api_key": api_key}
response = requests.get(url, params=params, timeout=60)
data = response.json()
if data["code"] != 0:
raise RuntimeError(f"启动失败: {data.get('msg', '未知错误')}")
return data["data"]
def connect_with_selenium(ws_data: dict):
"""通过 Selenium 接入已启动的浏览器"""
selenium_endpoint = ws_data["ws"]["selenium"] # 格式: "host:port"
webdriver_path = ws_data["webdriver"]
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", selenium_endpoint)
service = Service(executable_path=webdriver_path)
driver = webdriver.Chrome(service=service, options=chrome_options)
try:
driver.get("https://www.instagram.com")
print(f"页面标题: {driver.title}")
finally:
driver.quit()
# 执行
ws_data = start_browser(USER_ID, API_KEY)
print(f"Selenium 端点: {ws_data['ws']['selenium']}")
print(f"WebDriver 路径: {ws_data['webdriver']}")
connect_with_selenium(ws_data)
关键说明:
debuggerAddress直接使用 ws.selenium返回的host:port,无需额外协议前缀webdriver路径由 AdsPower 自动管理版本匹配,无需手动下载 chromedriver- 浏览器启动成功后,Selenium 即可接管,Instagram 页面加载完全由你的自动化代码控制
关闭浏览器
自然语言指令:
关闭 user_id 为 h1yynkm 的浏览器
背后调用的 API:GET /api/v1/browser/stop
def stop_browser(user_id: str, api_key: str):
url = f"{BASE_URL}/api/v1/browser/stop"
params = {"user_id": user_id, "api_key": api_key}
response = requests.get(url, params=params)
print(response.json())
stop_browser(USER_ID, API_KEY)
# {"code": 0, "msg": "success"}
批量操作:批量启动多个浏览器环境
自然语言指令:
帮我批量启动分组ID为1下的所有浏览器环境,并打印每个环境的 Selenium 接入地址
实战代码:
import requests
import concurrent.futures
import time
# ⚠️ 安全提示:请勿将 API_KEY 直接硬编码在代码中,建议使用环境变量或配置文件
API_KEY = "你的API密钥" # 建议改为 os.getenv("ADSPOWER_API_KEY")
GROUP_ID = "1"
BASE_URL = "http://local.adspower.net:50325"
def list_browsers(group_id: str) -> list:
"""获取指定分组下的所有环境"""
url = f"{BASE_URL}/api/v1/user/list"
params = {"group_id": group_id, "page": 1, "page_size": 100}
response = requests.get(url, params=params)
data = response.json()
if data["code"] != 0:
raise RuntimeError(f"查询失败: {data.get('msg')}")
return data["data"]["list"]
def start_single_browser(user_id: str) -> dict:
"""启动单个浏览器"""
url = f"{BASE_URL}/api/v1/browser/start"
params = {"user_id": user_id, "api_key": API_KEY}
try:
response = requests.get(url, params=params, timeout=60)
result = response.json()
if result["code"] == 0:
return {
"user_id": user_id,
"status": "success",
"selenium": result["data"]["ws"]["selenium"]
}
else:
return {"user_id": user_id, "status": "failed", "error": result.get("msg")}
except Exception as e:
return {"user_id": user_id, "status": "error", "error": str(e)}
# 查询所有环境
browsers = list_browsers(GROUP_ID)
print(f"分组 {GROUP_ID} 下共有 {len(browsers)} 个环境,开始批量启动...")
# 并发启动(建议不超过 5 个并发,避免机器资源耗尽)
results = []
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
futures = {
executor.submit(start_single_browser, b["user_id"]): b["name"]
for b in browsers
}
for future in concurrent.futures.as_completed(futures):
result = future.result()
results.append(result)
status_icon = "✅" if result["status"] == "success" else "❌"
print(f"{status_icon} {result['user_id']}: {result.get('selenium', result.get('error', ''))}")
print(f"\n总计: 成功 {sum(1 for r in results if r['status']=='success')},失败 {sum(1 for r in results if r['status']!='success')}")
AdsPower MCP Server 指纹配置实战
MCP Server 不只管理环境,还能配置指纹。AdsPower 的指纹配置能力覆盖 20+ 维度,这里重点演示几个高频配置。
创建带指纹配置的环境
自然语言指令:
创建一个浏览器环境,指纹配置:时区自动跟随IP,WebRTC 禁用,Canvas 添加噪音,UA 使用 Chrome on Windows
背后调用的 API:POST /api/v1/user/create/v2(V2 接口支持更精细的指纹参数)
import requests
import json
# ⚠️ 安全提示:请勿将 API_KEY 直接硬编码在代码中,建议使用环境变量或配置文件
API_KEY = "你的API密钥" # 建议改为 os.getenv("ADSPOWER_API_KEY")
BASE_URL = "http://local.adspower.net:50325"
def create_browser_with_fingerprint(name: str, fingerprint_config: dict) -> str:
"""创建带指纹配置的浏览器环境"""
url = f"{BASE_URL}/api/v1/user/create/v2"
payload = {
"name": name,
"group_id": "0",
"fingerprint_config": fingerprint_config
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
result = response.json()
if result["code"] != 0:
raise RuntimeError(f"创建失败: {result.get('msg')}")
return result["data"]["user_id"]
# 指纹配置示例
fingerprint = {
"automatic_timezone": "1", # 时区自动跟随 IP
"webrtc": "disabled", # WebRTC 完全禁用
"canvas": "1", # Canvas 添加噪音
"ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
"screen_resolution": "random", # 随机屏幕分辨率
"webgl": "2", # WebGL 自定义配置
"audio": "1", # 音频指纹添加噪音
}
user_id = create_browser_with_fingerprint("高隐匿环境", fingerprint)
print(f"创建成功,user_id: {user_id}")
指纹维度对照表

踩坑实录
坑一:chromedriver 版本不匹配
问题描述:AdsPower 返回了 webdriver 路径,但 Selenium 启动时报错 ChromeDriver 不可用或版本错误。
原因:AdsPower 自带的 chromedriver 与当前 Chrome 内核版本不一致。
解决方案:不要用 AdsPower 返回的 webdriver 路径,改用 webdriver_manager 自动同步版本:
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
# 替换为自动管理版本
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=chrome_options)
注意:
debuggerAddress(Selenium 接入点)仍然使用 AdsPower 返回的值,两者不冲突。
坑二:并发启动数量过多导致崩溃
问题描述:批量启动 10+ 浏览器环境时,部分浏览器启动失败或进程崩溃。
原因:机器性能不足,每个 Chrome 进程占用约 300~500MB 内存。
解决方案:控制并发数,建议每台机器同时启动不超过 5 个浏览器环境。
坑三:Selenium 接入成功但页面操作超时
问题描述:浏览器启动成功,Selenium 也连接上了,但执行 driver.get() 或元素定位时持续超时。
原因:AdsPower 启动的浏览器实例网络代理响应慢,或目标网站反爬机制触发了加载延迟。

解决方案:为 Selenium 操作添加合理的超时控制,并使用显式等待替代固定延时:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# 页面加载超时 30 秒
driver.set_page_load_timeout(30)
try:
driver.get("https://www.instagram.com")
# 显式等待元素出现(最长 20 秒)
wait = WebDriverWait(driver, 20)
wait.until(EC.presence_of_element_located((By.TAG_NAME, "body")))
print(f"页面标题: {driver.title}")
except Exception as e:
print(f"页面加载失败: {e}")
注意:避免使用
time.sleep()固定延时,推荐使用WebDriverWait显式等待,可以大幅提升脚本稳定性和执行效率。
总结与延伸
核心结论
经过完整实测,AdsPower 官方 MCP Server 有以下核心价值:
- 零适配成本:官方提供,开箱即用,无需自己封装 Local API
- 自然语言驱动:配合 AI 编码助手,用大白话控制浏览器环境
- 完整能力覆盖:Local API 的 20+ 接口全部通过 MCP 暴露
- 生产级稳定:官方维护,与客户端版本同步更新
- 指纹配置强大:20+ 指纹维度,业界领先
适用场景

延伸阅读
- AdsPower Local API 完整文档
- GitHub: AdsPower/adspower-browser
- AdsPower MCP Server GitHub 仓库
- BrowserLeaks 指纹检测工具
作者:张大鹏
AI量化 / AI全栈开发从业者
51CTO 博客专家
专注领域:AI量化、海外电商自动化
微信公众号:AI大鹏量化(欢迎交流)

人们还读过
- Flask + MCP 协议打通 AdsPower 指纹浏览器自动化,这个方案太丝滑了

Flask + MCP 协议打通 AdsPower 指纹浏览器自动化,这个方案太丝滑了
本文介绍如何通过 Flask + MCP 架构实现对 AdsPower 指纹浏览器的可视化自动化控制。涵盖方案设计、代码实战和效果展示,适合 AI 应用开发者和跨境电商技术负责人。预计阅读时间 15 分钟。
- 用AI Agent控制浏览器:MCP协议让指纹浏览器成为Agent的工具

用AI Agent控制浏览器:MCP协议让指纹浏览器成为Agent的工具
本文深入解析AI Agent如何通过AdsPower指纹浏览器的MCP协议实现浏览器自动化控制以及多账号隔离与自动化操作,涵盖Selenium实战、MCP Server接入方式及真实项目应用场景,帮助你构建可规模化的AI自动化系统。
- 用AI Agent控制指纹浏览器实现Instagram全自动注册(附源码)

用AI Agent控制指纹浏览器实现Instagram全自动注册(附源码)
本文转载自 51CTO 博客,介绍如何结合 AI Agent、AdsPower 指纹浏览器与浏览器自动化技术,实现 Instagram 注册流程的环境隔离、状态管理与自动化控制。
- 采集浏览器AdsPower:让大规模任务跑得更稳更快

采集浏览器AdsPower:让大规模任务跑得更稳更快
AdsPower 采集浏览器将浏览器环境抽象为可调度资源,支持大规模动态页面采集、多地区数据抓取和 AI Agent 自动调用 API,提升任务稳定性和扩展能力。
- AI Agent 自动注册 Facebook 全流程实测:真正卡住的是这一步

AI Agent 自动注册 Facebook 全流程实测:真正卡住的是这一步
这次 AdsPower 做了一次自动化测试:用 AI Agent + Puppeteer,在指纹浏览器环境中完整跑了一遍 Facebook 注册流程。填写表单、邮箱验证、安全检查都可以自动完成,但最后还是卡在了视频刷脸验证。



