AdsPower
AdsPower

用AI Agent控制浏览器:MCP协议让指纹浏览器成为Agent的工具

By AdsPower||25 Views

本文转载自 51CTO 博客作者「大鹏AI教育」的原创文章《用AI Agent控制浏览器:MCP协议让指纹浏览器成为Agent的工具》,原文链接:https://blog.51cto.com/u_12805695/14591615

本文仅作技术学习与自动化方案参考,版权归原作者所有,转载请以原文授权要求为准。


我是张大鹏,专注AI应用开发和出海电商自动化多年。最近在研究一个很有意思的方向——如何让AI Agent真正"动手"干活,而不是只会输出文字。说白了,Agent能操控浏览器,才是自动化落地最自然的方式。

为什么这么说?因为大量出海业务场景(社交媒体运营、广告投放、数据采集)本质上都是浏览器操作。传统的自动化方案要么写死脚本难以维护,要么依赖RPA工具无法和AI结合。而现在,借助MCP协议(Model Context Protocol),我们终于可以让AI Agent直接控制指纹浏览器了。

这篇文章,就是我这段时间的实战总结。

一、为什么AI Agent需要操控浏览器?

AI Agent的核心能力是推理+执行——它能理解任务、制定计划、调用意具完成操作。在我的实际项目中,Agent最常见的执行目标就是浏览器:登录账号、发布内容、提取数据、填写表单……

但这里有个根本矛盾:

用AI Agent控制浏览器:MCP协议让指纹浏览器成为Agent的工具

MCP协议本质上是一套标准化的工具调用规范,它让AI Agent可以通过统一的接口发现和调用外部工具。而指纹浏览器(如AdsPower)正好提供了完整的浏览器管理API——两者结合,Agent就能像人一样操控浏览器了。


二、MCP协议是什么?解决什么问题?

MCP(Model Context Protocol,模型上下文协议)是Anthropic在2024年底提出的一套开放协议,旨在解决大模型与外部工具之间的连接标准化问题。

2.1 MCP的核心设计思想

简单说,MCP做了一件这件事:定义了一套"工具发现和调用"的标准格式

MCP的核心设计思想

在MCP出现之前,每家工具提供商都定义自己的接口规范。Agent想调用10个工具,就得写10套适配代码。MCP出现之后,所有支持MCP的工具都遵循同一套规范,Agent只需要实现一次MCP客户端,就能调用所有MCP工具。

传统方式:
Agent → 工具A适配器 → 工具A
Agent → 工具B适配器 → 工具B
Agent → 工具C适配器 → 工具C
...(N个工具 = N套适配器)

MCP方式:
Agent → MCP Client → MCP Server → 工具A
                           → 工具B
                           → 工具C
...(N个工具 = 1个MCP Client)


2.2 MCP的三大核心概念

MCP协议中有三个核心概念需要理解:

  1. Host(主机):AI应用本身,如Claude Desktop、OpenClaw、Cursor等。Host负责运行MCP Client。
  2. Client(客户端):MCP协议客户端实现,每个工具对应一个Client。
  3. Server(服务端):工具提供者,如AdsPower提供的MCP Server。每个工具的功能通过Server暴露。

通信方式支持两种模式:

  • 本地模式(Local):通过stdio标准输入输出通信,工具和Host在同一台机器
  • 远程模式(Remote):通过HTTP/WebSocket通信,支持分布式部署

对于我们出海自动化场景,本地模式是最实用的——AdsPower客户端运行在本地,MCP Server也跑在本地,通过stdio通信。


三、AdsPower如何提供MCP接口?

说到指纹浏览器的MCP支持,AdsPower是目前唯一官方提供完整MCP Server实现的厂商。它的GitHub仓库 AdsPower/adspower-browser 包含两个核心包:

  • adspower-browser:主CLI工具包
  • local-api-mcp:MCP Server实现(TypeScript)

3.1 支持的AI工具清单

AdsPower的MCP Server可以接入多种主流AI编码助手:

用AI Agent控制浏览器:MCP协议让指纹浏览器成为Agent的工具


3.2 MCP Server暴露的核心能力

AdsPower的MCP Server将Local API封装成了MCP工具,主要包括:

AdsPower的MCP Server

用AI Agent控制浏览器:MCP协议让指纹浏览器成为Agent的工具

这套能力意味着:AI Agent可以通过自然语言控制AdsPower里的任意浏览器环境

举几个实际的场景:

  • "帮我启动h1yynkm这个配置文件"
  • "查询一下当前有多少个浏览器在运行"
  • "新建一个境外节点的代理环境,配置Canvas噪音"
  • "关闭所有浏览器"

这些操作Agent都能直接完成,不需要人类在UI里点点点。


四、实战:让AI Agent操控AdsPower浏览器

接下来演示一个完整的实战流程:用OpenClaw(我的主力AI助手)连接AdsPower的MCP Server,并通过自然语言操控浏览器

4.1 环境准备

前置条件:

安装MCP Server:

# 方式一:通过OpenClaw的clawhub安装(最简单)
npx clawhub@latest install adspower-browser --force

# 方式二:自行构建
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


4.2 配置OpenClaw连接AdsPower MCP

在OpenClaw的配置文件中添加MCP Server:

{
  "mcpServers": {
    "adspower": {
      "command": "node",
      "args": ["/path/to/local-api-mcp/build/index.js"],
      "env": {
        "PORT": "50325",
        "API_KEY": "YOUR_API_KEY"
      }
    }
  }
}

配置完成后重启OpenClaw,MCP Server就会自动连接。


4.3 实战一:用自然语言启动浏览器

在OpenClaw对话中输入:

帮我启动AdsPower里serial_number为test001的浏览器环境


Agent会调用MCP工具:

调用 start_browser:
  user_id: "对应配置文件ID"
  serial_number: "test001"

AdsPower返回:

{
  "code": 0,
  "data": {
    "ws": {
      "selenium": "127.0.0.1:50300",
      "puppeteer": "ws://127.0.0.1:50300/devtools/browser/xxxxxx"
    },
    "debug_port": "50300",
    "webdriver": "C:\\路径\\chromedriver.exe"
  }
}

Selenium接入点就拿到了。接下来Agent可以调用Selenium连接这个端点,执行具体的浏览器操作。


4.4 实战二:Selenium连接AdsPower浏览器

拿到WebSocket端点后,标准的Selenium接入方式如下:

import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

# 1. 启动浏览器,获取接入点
api_key = "YOUR_API_KEY"
user_id = "h1yynkm"

url = f"http://local.adspower.net:50325/api/v1/browser/start?user_id={user_id}&api_key={api_key}"
response = requests.get(url, timeout=30)
data = response.json()

if data["code"] != 0:
    raise RuntimeError(f"启动失败: {data.get('msg')}")

# 2. 提取Selenium端点
ws_data = data["data"]["ws"]
selenium_endpoint = ws_data["selenium"]  # 格式: "127.0.0.1:50300"
webdriver_path = data["data"]["webdriver"]

# 3. Selenium连接
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)

# 4. 执行自动化操作
driver.get("https://www.instagram.com")
print("Instagram页面加载成功")

# 5. 关闭浏览器
driver.quit()


4.5 实战三:批量操作多个账号

多账号场景才是MCP+指纹浏览器组合的真正价值所在:

import requests
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

api_key = "YOUR_API_KEY"
base_url = "http://local.adspower.net:50325"

# 账号列表(serial_number作为唯一标识)
accounts = [
    {"user_id": "account_001", "serial": "ig_001", "proxy": "us"},
    {"user_id": "account_002", "serial": "ig_002", "proxy": "uk"},
    {"user_id": "account_003", "serial": "ig_003", "proxy": "jp"},
]

def start_browser(user_id, serial_number):
    url = f"{base_url}/api/v1/browser/start?user_id={user_id}&serial_number={serial_number}&api_key={api_key}"
    resp = requests.get(url, timeout=30).json()
    if resp["code"] != 0:
        raise RuntimeError(f"启动失败: {resp.get('msg')}")
    return resp["data"]["ws"]["selenium"], resp["data"]["webdriver"]

def create_driver(selenium_endpoint, webdriver_path):
    chrome_options = Options()
    chrome_options.add_experimental_option("debuggerAddress", selenium_endpoint)
    service = Service(executable_path=webdriver_path)
    return webdriver.Chrome(service=service, options=chrome_options)

# 依次操作每个账号
for account in accounts:
    selenium_ep, wd_path = start_browser(account["user_id"], account["serial"])
    driver = create_driver(selenium_ep, wd_path)

    try:
        driver.get("https://www.instagram.com")
        print(f"账号 {account['serial']} 已打开Instagram")
        time.sleep(2)  # 模拟操作间隔
    finally:
        driver.quit()
        requests.get(f"{base_url}/api/v1/browser/stop?user_id={account['user_id']}&api_key={api_key}")

这段代码展示了完整的批量操作链路:MCP启动环境 → Selenium执行操作 → 关闭浏览器。配合AI Agent的推理能力,你甚至可以让Agent自己判断每个账号的状态,决定下一步操作。


五、指纹配置:让每个环境都独一无二

AdsPower的核心能力之一是20+维度的指纹配置。每个浏览器环境可以有完全不同的指纹,让平台无法通过浏览器指纹关联多个账号。

用AI Agent控制浏览器:MCP协议让指纹浏览器成为Agent的工具

用AI Agent控制浏览器:MCP协议让指纹浏览器成为Agent的工具

用AI Agent控制浏览器:MCP协议让指纹浏览器成为Agent的工具

我的实战经验:指纹配置不是越多越好,而是要合理且自洽。时区、语言、IP三者必须匹配,否则平台很容易发现异常。比如你用一个境外节点,但时区设成了北京,那基本等于告诉平台"我是假的"。


六、踩坑记录

在集成AdsPower MCP过程中,我踩了几个坑,这里分享出来帮大家避雷。

6.1 API Key版本匹配问题

AdsPower的Local API从V2版本开始扩展了更多参数(如V2版本的fingerprint_config有更多独立开关)。建议始终使用V2版本的接口,V1和V2返回结构一致,但V2控制粒度更细。


6.2 chromedriver版本同步

AdsPower内置了chromedriver,但每次Chrome内核更新(2026年3月刚新增了145和146内核),chromedriver可能会出现版本不匹配。建议锁定chromedriver版本,或使用webdriver_manager自动同步:

from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service

service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)


6.3 代理IP质量至关重要

指纹浏览器能模拟指纹,但无法伪造IP。Instagram对住宅代理IP的检测非常严格,建议使用Bright Data或Oxylabs等主流代理商的住宅代理,不要贪便宜用数据中心IP,否则账号分分钟被封。


6.4 MCP Server启动失败排查

如果MCP Server连不上,先确认端口是否被占用:

# Windows检查端口占用
netstat -ano | findstr 50325

# 确认AdsPower客户端API服务是否启用
# AdsPower → 设置 → API设置 → 确认"启用Local API"已勾选


七、总结与延伸

7.1 核心价值回顾

MCP协议 + 指纹浏览器的组合,给AI Agent的自动化能力带来了质的飞跃:

  1. 标准化:MCP统一了工具调用规范,Agent无需为每个浏览器环境写适配器
  2. 隔离性:指纹浏览器提供真正的浏览器隔离,每个账号环境独立
  3. 可编程:通过API/MCP动态管理环境,Agent可以自己决定启动什么账号、执行什么操作
  4. 规模化:支持批量创建和管理,几十上百个账号也能轻松应对

7.2 适用场景

这套方案最适合以下场景:

  • 社交媒体矩阵运营:Instagram、Facebook、TikTok多账号管理
  • 出海电商多店铺管理:Amazon、Shopify多店铺防关联
  • 自动化测试:需要对不同指纹环境做一致性验证
  • 数据采集:需要模拟真实用户行为的高隐蔽性爬虫

7.3 下一步探索

接下来我计划探索几个方向:

  • BrowserLeaks验证指纹隔离效果,测试AdsPower的指纹伪造是否足够"真实"
  • RPA与API协同:固定流程用AdsPower RPA,复杂逻辑用AI Agent决策
  • Agent自主决策多账号操作:让Agent根据账号状态自动选择下一步行动


参考资料

AdsPower/adspower-browser GitHub仓库

AdsPower Local API官方文档

Anthropic MCP协议说明


作者:张大鹏

AI量化 / AI全栈开发从业者
专注领域:AI量化、出海电商自动化
10年AI应用开发经验,主导过多个规模化AI自动化项目
研究方向:AI Agent架构设计、浏览器自动化、多账号矩阵管理

AdsPower

与AdsPower一起,开启多账号管理新篇章

用AI Agent控制浏览器:MCP协议让指纹浏览器成为Agent的工具

人们还读过