AI Agent + 指纹浏览器:从0搭建MCP Server实现批量账号自动化管理
我是张大鹏,做了十多年人工智能,带过不少项目。说实话,AI Agent 最难的不是生成内容,是"动手干活"——大模型再强,如果只能输出文字而不能操控真实环境,自动化就永远差最后一公里。最近在研究 Instagram 矩阵自动化时,我发现了一个关键破局点:MCP 协议 + 指纹浏览器,让 AI Agent 直接操控批量浏览器账号。本文记录从 0 搭建 AdsPower MCP Server 的完整过程,附可运行代码。
一、为什么 AI Agent 需要 MCP 协议?
1.1 传统 AI 自动化的瓶颈
我和很多开发者聊过 AI 自动化,发现一个普遍困境:
- API 调用只能获取数据,不能操控真实 UI
- Selenium/Playwright脚本可以控制浏览器,但需要人工写代码
- RPA 工具可以录像模拟,但无法与 AI 决策链路打通
换句话说:AI 负责思考,自动化工具负责执行,但两者之间缺一座桥。
1.2 MCP 协议是什么?
MCP(Model Context Protocol)是 Anthropic 在 2024 年底开源的一个标准协议,旨在让 AI 模型与外部工具无缝对接。它的设计哲学很简单:
工具是 AI 能力的扩展,而不是附庸。
MCP 的核心架构是客户端-服务器模式:
┌─────────────────┐ MCP ┌─────────────────┐ │ AI 编码助手 │◄──────────────────►│ MCP Server │ │ Claude / Cursor │ │ (如 AdsPower) │ │ OpenClaw │ │ │ └─────────────────┘ └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 指纹浏览器环境 │ │ (批量账号管理) │ └─────────────────┘为什么重要?MCP 协议让 AI 直接"调用工具",而不是通过 API 手工拼接 URL。AI 可以用自然语言驱动浏览器操作:
# 传统的 API 调用方式requests.get("http://local.adspower.net:50325/api/v1/browser/start?user_id=xxx")# MCP 协议下,AI 只需要说:# "帮我启动 ID 为 h1yynkm 的浏览器环境"1.3 我的感受
说实话,MCP 协议不是什么新概念,JSON-RPC、REST API 都能做类似的事。但 MCP 的优势在于标准化和上下文感知——AI 知道有哪些工具可用,工具的输入输出是什么,这让"AI 控制浏览器"从不可能变成了日常。
二 AdsPower 为什么是指纹浏览器 MCP 的首选?
在调研阶段,我对比了市面主流指纹浏览器(Hubstudio、林猎等),结论如下:
| 能力维度 | AdsPower | Hubstudio | 林猎 |
|---|---|---|---|
| Local API | ✅ 20+ 接口 | ✅ 有 | ✅ 有 |
| Selenium/Puppeteer | ✅ 原生支持 | ✅ 支持 | ✅ 支持 |
| MCP Server | ✅官方提供 | ❌ 未提供 | ❌ 未提供 |
| 指纹配置维度 | 20+ | 较多 | 较多 |
| GitHub 仓库 | ✅ 开源 | ❌ | ❌ |
AdsPower 是三者中唯一提供官方 MCP Server 的厂商,而且是开源的。这一点对于想做 AI 自动化的开发者来说,是决定性的优势。
三 从 0 搭建 AdsPower MCP Server
3.1 环境准备
在开始之前,确保你的环境满足以下条件:
| 要求 | 说明 |
|---|---|
| 操作系统 | Windows / macOS / Linux |
| Node.js | ≥ 18.0(推荐 Node 20) |
| AdsPower 客户端 | V2.4.1 及以上 |
| API Key | 在 AdsPower UI 中生成 |
安装 Node.js(如果还没有):
# 检查版本node--version# 如果低于 18,更新到最新 LTS 版本3.2 获取 AdsPower API Key
- 打开 AdsPower 客户端
- 进入设置 → API 设置
- 勾选"启用 Local API"
- 点击"生成 API Key",复制保存
注意:API Key 只显示一次,请妥善保管。
3.3 安装 MCP Server
AdsPower 官方提供两种安装方式,我推荐源码构建方式——更可控,而且可以直接用于 AI 编码助手集成。
# 1. 克隆官方仓库gitclone https://github.com/AdsPower/adspower-browser.gitcdadspower-browser# 2. 安装依赖(推荐使用 pnpm)pnpminstall# 如果没有 pnpm,先安装:npm install -g pnpm# 3. 构建项目pnpmrun build# 4. 构建产物位置# packages/local-api-mcp/build/index.js更简单的方式——直接通过 npx 运行:
npx-ylocal-api-mcp-typescript不过 npx 方式每次都会下载,不推荐在生产环境使用。
3.4 配置 AI 编码助手接入
构建完成后,你就有了一个可对接 AI 工具的 MCP Server。以下是主流 AI 工具的接入方式:
Claude Code:
claude mcpaddadspower-local-api\-ePORT="50325"\-eAPI_KEY="your_api_key_here"\-- npx-ylocal-api-mcp-typescriptCursor:
在 Settings → MCP → Add New Server,填入:
{"mcpServers":{"adspower-local-api":{"command":"npx","args":["-y","local-api-mcp-typescript"],"env":{"PORT":"50325","API_KEY":"your_api_key_here"}}}}OpenClaw(我的主力工具):
npx clawhub@latestinstalladspower-browser--force接入成功后,你就可以用自然语言控制浏览器了:
用户:帮我启动 ID 为 h1yynkm 的浏览器环境 AI:调用 MCP tool: start_browser → POST http://local.adspower.net:50325/api/v1/browser/start?user_id=h1yynkm&api_key=xxx → 浏览器启动成功,返回 Selenium 接入点四 用 MCP Server 控制浏览器:代码实战
4.1 MCP Server 提供的核心工具
AdsPower MCP Server 封装了以下核心能力:
| 工具名称 | 功能描述 |
|---|---|
start_browser | 启动指定浏览器环境 |
stop_browser | 关闭指定浏览器 |
stop_all_browsers | 关闭所有浏览器 |
get_browser_list | 获取环境列表 |
get_browser_state | 查询浏览器启动状态 |
如果你用的是 Node.js SDK 而不是 MCP,还可以调用更底层的 API,包括创建/更新/删除环境、代理配置等。
4.2 场景一:用 Claude 控制启动/关闭浏览器
假设我已经配置好了 AdsPower MCP Server,在 Claude Code 中:
# 启动浏览器环境# 我只需要说:"帮我启动 h1yynkm 这个环境"# Claude 会调用 MCP 工具,类似这样:# start_browser(user_id="h1yynkm", api_key="xxx")# 返回结果包含 Selenium 和 Puppeteer 的接入点:{"code":0,"data":{"ws":{"selenium":"127.0.0.1:50300","puppeteer":"ws://127.0.0.1:50300/devtools/browser/xxxx"},"debug_port":"50300","webdriver":"C:\\path\\to\\chromedriver.exe"},"msg":"success"}4.3 场景二:批量启动多个账号(Python + Selenium)
假设我们有一批 Instagram 账号,要批量启动浏览器并执行操作:
importrequestsimporttimefromseleniumimportwebdriverfromselenium.webdriver.chrome.optionsimportOptionsfromselenium.webdriver.chrome.serviceimportService# AdsPower API 配置API_BASE="http://local.adspower.net:50325"API_KEY="your_api_key_here"# 待启动的账号列表ACCOUNT_LIST=[{"user_id":"h1yynkm","serial":"account_001","country":"US"},{"user_id":"h1yynkm2","serial":"account_002","country":"UK"},{"user_id":"h1yynkm3","serial":"account_003","country":"JP"},]defstart_browser(user_id:str,api_key:str)->dict:"""通过 AdsPower API 启动浏览器"""url=f"{API_BASE}/api/v1/browser/start"params={"user_id":user_id,"api_key":api_key}response=requests.get(url,params=params,timeout=60)data=response.json()ifdata["code"]!=0:raiseRuntimeError(f"启动失败:{data.get('msg','未知错误')}")returndata["data"]defconnect_selenium(ws_endpoint:str,webdriver_path:str):"""通过 Selenium 接入已启动的浏览器"""chrome_options=Options()# 关键:使用 debuggerAddress 连接到 AdsPower 浏览器chrome_options.add_experimental_option("debuggerAddress",ws_endpoint.replace("ws://",""))service=Service(executable_path=webdriver_path)driver=webdriver.Chrome(service=service,options=chrome_options)returndriverdefbatch_login_instagram(accounts:list):"""批量启动浏览器并访问 Instagram 登录页"""foraccountinaccounts:print(f"[{account['serial']}] 正在启动浏览器...")# 1. 启动浏览器browser_data=start_browser(account["user_id"],API_KEY)selenium_endpoint=browser_data["ws"]["selenium"]webdriver_path=browser_data["webdriver"]# 2. Selenium 接入driver=connect_selenium(selenium_endpoint,webdriver_path)try:# 3. 访问 Instagramdriver.get("https://www.instagram.com")time.sleep(3)# 等待页面加载current_url=driver.current_urlprint(f"[{account['serial']}] 当前页面:{current_url}")# 判断是否需要登录(如果 URL 变了说明已登录)if"accounts/login"incurrent_url:print(f"[{account['serial']}] 需要登录操作")else:print(f"[{account['serial']}] 已登录状态")exceptExceptionase:print(f"[{account['serial']}] 操作异常:{e}")finally:# 关闭浏览器,释放资源driver.quit()# 调用 stop_browser 彻底关闭 AdsPower 环境requests.get(f"{API_BASE}/api/v1/browser/stop",params={"user_id":account["user_id"],"api_key":API_KEY})print(f"[{account['serial']}] 浏览器已关闭")time.sleep(2)# 避免并发过快if__name__=="__main__":batch_login_instagram(ACCOUNT_LIST)运行效果:
[account_001] 正在启动浏览器... [account_001] 当前页面: https://www.instagram.com/accounts/login/ [account_001] 需要登录操作 [account_001] 浏览器已关闭 [account_002] 正在启动浏览器... [account_002] 当前页面: https://www.instagram.com/ [account_002] 已登录状态 [account_002] 浏览器已关闭 ...4.4 场景三:用 MCP Server 配合 AI Agent 做智能决策
这是最让我兴奋的场景——AI Agent 不只是执行脚本,还能根据环境状态做判断:
用户:帮我检查这批 Instagram 账号的登录状态,登录失败的用 AI 生成一份报告 AI Agent 收到任务后: 1. 调用 get_browser_list 获取所有环境信息 2. 批量启动浏览器 3. 检测每个账号的 Instagram 登录状态 4. 汇总结果,AI 生成诊断报告 5. 调用 stop_all_browsers 清理环境这种"AI 决策 + MCP 执行"的模式,是真正让 AI 从"聊天"走向"干活"的关键一步。
插图2
五 指纹配置:让每个账号看起来像真人
MCP Server 启动浏览器时,可以携带完整的指纹配置参数。我的研究结论是:AdsPower 支持 20+ 指纹维度,这是批量账号防关联的核心。
5.1 创建环境时指定指纹配置(V2 API)
importrequests API_KEY="your_api_key_here"API_BASE="http://local.adspower.net:50325"# 创建一个新环境,带指纹配置create_url=f"{API_BASE}/api/v1/user/create/v2"payload={"api_key":API_KEY,"name":"Instagram_US_001","group_id":0,# 默认分组"fingerprint_config":{"automatic_timezone":"1",# 自动基于 IP 设置时区"timezone":"America/New_York","webrtc":"forward",# WebRTC 走代理"location_switch":"1",# 自动基于 IP 设置位置"language":["en-US","en"],"ua":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36","screen_resolution":"random",# 随机分辨率"fonts":["all"],# 加载所有字体"canvas":"1",# Canvas 添加噪音"webgl":"2",# WebGL 自定义模式"audio":"1",# 音频指纹添加噪音"hardware_concurrency":"8",# CPU 核数"device_memory":"8",# 内存 8GB},"user_proxy_config":{"proxy_type":"http","proxy_host":"proxy.example.com","proxy_port":"8080","proxy_user":"your_proxy_user","proxy_password":"your_proxy_password",}}response=requests.post(create_url,json=payload)print(response.json())5.2 指纹配置核心维度说明
| 维度 | 参数值 | 我的建议 |
|---|---|---|
| 时区 | automatic_timezone: "1" | 配合代理 IP 使用,让时区与 IP 所在地一致 |
| WebRTC | "forward" | 多账号必须关闭或走代理,否则真实 IP 泄露 |
| Canvas | "1" | 添加噪音,防止 Canvas 指纹追踪 |
| WebGL | "2" | 自定义模式,比默认更安全 |
| 屏幕分辨率 | "random" | 避免多账号分辨率完全相同 |
| 字体 | ["all"] | 字体是最常见的关联因子之一 |
💡重要提醒:指纹配置不是越多越好,也不是越强越好。真实感是关键——刻意伪造的指纹反而更容易被检测。最好通过 BrowserLeaks 实时检测每套配置的隔离效果。
插图3
六 实际应用场景
6.1 Instagram 矩阵管理
这是我正在做的项目:InsMatrixAutomation。
核心需求:
- 批量管理 20+ Instagram 账号
- 每个账号独立指纹、独立代理 IP
- AI 自动执行关注/点赞/评论操作
现有方案痛点:
- 传统 Selenium 脚本需要为每个账号写独立配置
- 指纹伪造不够真实,容易关联封号
- 批量操作时 IP 集中,容易被平台识别
AdsPower + MCP 的优势:
- 环境隔离彻底,指纹个性化配置
- MCP Server 让 AI 直接控制环境切换
- Local API 支持批量程序化管理
6.2 跨境电商多账号运营
适用于:
- Amazon / eBay 多店铺管理
- 社交媒体多账号发帖
- 广告投放账户矩阵
6.3 自动化测试
用不同的指纹配置测试你的 Web 应用:
- 不同浏览器指纹下的渲染差异
- 反爬虫策略在不同指纹下的有效性
- WebGL / Canvas 指纹的一致性验证
总结
| 维度 | 内容 |
|---|---|
| 核心思路 | 用 MCP 协议打通 AI Agent 与指纹浏览器,让 AI 直接控制批量账号环境 |
| 关键步骤 | 1. 安装 Node.js ≥18;2. 克隆 AdsPower 仓库并构建;3. 配置 API Key;4. 接入 AI 编码助手 |
| MCP 核心价值 | 自然语言驱动浏览器操作,AI 决策链与执行链无缝衔接 |
| 代码要点 | 启动浏览器 → Selenium 接入 → 执行操作 → 关闭环境 |
| 注意事项 | API Key 妥善保管;指纹配置要配合代理 IP;批量操作需控制并发节奏 |
参考资料:
- AdsPower 官方 GitHub 仓库
- AdsPower Local API 官方文档
- AdsPower 帮助中心
- BrowserLeaks 指纹检测工具
作者:张大鹏
日期:2026-05-11
团队:大鹏 AI 教育
原创不易,转载需注明出处
