AdsPower — Master Knowledge Base for Hermes-Driven Reddit Marketing

Unified reference combining the three analysis sections (01 Local API, 02 CLI/Skill, 03 MCP/RPA Plus) into a single operator handbook. Source files: 01-local-api.md, 02-cli-skill.md, 03-mcp-rpa.md in this directory. Generated by synthesis task t_04ec6af5.


1. Executive Summary

AdsPower is an anti-detect browser that runs many isolated browser profiles, each with its own fingerprint (canvas, WebGL, UA, timezone, WebRTC) and network identity (proxy). For Reddit marketing at scale, each AdsPower profile = one Reddit account, isolated from the others by fingerprint + proxy + cookie jar.

There are five integration layers, each with a distinct role. Using the wrong layer breaks the workflow:

LayerWhat it doesWho drives itUsed for Reddit?
Local REST APIProfile lifecycle, groups, tags, proxies, kernels — HTTP endpoints on :50325 (app) / :50725 (CLI runtime)Any HTTP clientFoundation — all programmatic mgmt
ads CLI / Hermes skillShell wrapper over the Local API; ads <command> '{json}'Hermes agent (terminal)Profile farm CRUD — primary interface for agents
MCP ServerPlaywright-backed browser automation exposed as MCP tools (navigate, click, fill, screenshot)Hermes agent (MCP client)In-page Reddit actions (upvote, comment, post) — the engagement engine
RPA PlusVisual node-based process builder inside AdsPower GUI — variables, if/loops, data processing, third-party tools, headless mode, MarketplaceHuman operator in AdsPower UIBulk fixed-workflow runs across up to 100 threads / 5,000 profiles — not Hermes-callable
SynchronizerManual multi-window sync — actions in the main window replicate across controlled windows (typing, clicks, tabs, scroll)Human operator in AdsPower UIManual multi-account operations (warming, coordinated logins) — not scriptable

Rule of thumb: the CLI manages profiles; the MCP server drives them. The CLI can launch a browser but cannot click inside it. RPA Plus is a human bulk tool — Hermes can generate process definitions (JSON import) and pre-fill global variable defaults for a human to import, but cannot trigger RPA Plus runs programmatically. The Synchronizer is real-time human control, not automation.

Architecture for Rahul’s setup (single Windows VPS — AdsPower + Hermes on the same machine):

┌──────────────────────────────────────────────────────────────────────────┐
│  Windows VPS (EC2) — C:\Users\Administrator                              │
│                                                                          │
│  ┌────────────────┐    ┌──────────────────────────────────────────────┐ │
│  │ ads CLI        │    │ MCP client                                   │ │
│  │ (ads.CMD,      │    │   tools: mcp__adspower__<navigate|click|...>  │ │
│  │  startup VBS + │    │                                              │ │
│  │  watchdog)     │    │   stdio JSON-RPC                             │ │
│  └──────┬─────────┘    └──────────────┬───────────────────────────────┘ │
│         │ HTTP                        │ spawn (npx -y local-api-mcp-    │
│         │ :50325 / :50725             │  typescript)                    │
└─────────┼─────────────────────────────┼──────────────────────────────────┘
          │                             │ HTTP :50325
          │                             ▼
          │             ┌─────────────────────────────────┐
          │             │ local-api-mcp-typescript        │
          │             │ (Playwright + TS, same machine) │
          │             └────────────┬────────────────────┘
          │                          │ WebSocket (ws.puppeteer)
          ▼                          ▼
   ┌─────────────────────────────────────────────────────┐
   │  AdsPower (same Windows VPS)                        │
   │  Local API on localhost:50325, Bearer token         │
   │                                                     │
   │  Profile A (proxy US-1) ──► Reddit account @alpha1  │
   │  Profile B (proxy US-2) ──► Reddit account @alpha2  │
   │  Profile C (proxy DE-1) ──► Reddit account @beta1   │
   │  ... (55 profiles)                                  │
   └─────────────────────────────────────────────────────┘

Why single machine: AdsPower is a desktop app (Windows/macOS) and this setup runs it directly on the Windows VPS alongside Hermes — no remote host, no tunnel. The MCP server (Node.js) and the ads CLI run on the same machine and hit http://localhost:50325 (app) / :50725 (CLI runtime).


2. Authentication & Connection

ItemValue
Auth methodBearer Token (API Key)
Token sourceAdsPower client → Automation → API → Generate
Default base URLhttp://localhost:50325 (app) / http://localhost:50725 (CLI runtime)
CLI authads start -k <KEY> or export ADS_API_KEY=<KEY>
MCP authenv var in Hermes config (already configured — mcp__adspower__* tools live)
Headless mode"AdsPower Global.exe" --headless=true --api-key=<KEY> --api-port=50325 (Windows)
API key resetStop service → reset → restart. Invalidates old key immediately.
API verificationMust be disabled in AdsPower for MCP/programmatic calls (trusted profiles only)

When API key is required: CLI/headless mode (always), security-verification-enabled mode (always), GUI mode without verification (optional but recommended).


3. Rate Limits

Profile count in accountStandard endpoint rate
0–2002 req/sec
200–50005 req/sec
5000+10 req/sec

Fixed 1 req/sec endpoints (always, regardless of profile count):

  • GET /api/v1/user/list
  • POST /api/v2/browser-profile/list
  • GET /api/v1/group/list
  • POST /api/v2/browser-profile/cookies
  • POST /api/v2/browser-profile/download-kernel

Reddit workflow implication: with <200 profiles you can open/close 2 profiles/sec — a 50-profile campaign opens in ~25s. But profile list polling is capped at 1/sec; use active/active-local endpoints (standard rate) for status checks, not the list endpoint.


4. Complete API/CLI Reference (Condensed)

Full detail in 01-local-api.md (REST) and 02-cli-skill.md (CLI). Below is the operator-facing cheat sheet.

4.1 Connection & Runtime

CLIEndpointPurpose
ads status—Local API runtime status
ads check-statusGET /statusPing API availability
ads start [-k KEY]—Start runtime
ads stop / ads restart—Stop / restart runtime

4.2 Profile Lifecycle (open/close/status)

CLIEndpointKey params
ads open-browser <id|json>POST /api/v2/browser-profile/startprofile_id or profile_no; headless, launch_args, last_opened_tabs, proxy_detection, cdp_mask, delete_cache. Returns ws.puppeteer, ws.selenium, debug_port — hand these to MCP/Playwright.
ads close-browser <id>POST /api/v2/browser-profile/stopprofile_id or profile_no
ads close-all-profilesPOST /api/v1/browser/stop-allEmergency close
ads get-browser-active <id>GET /api/v2/browser-profile/activeReturns status (Active/Inactive) + ws/debug_port when Active
ads get-cloud-active—Cloud-side status, up to 100 comma-separated IDs
ads get-opened-browser—List all profiles open on this device

4.3 Profile CRUD

CLIEndpointRequiredNotes
ads create-browser '{json}'POST /api/v2/browser-profile/creategroup_id, one of username/password/cookie/fakey, fingerprint_config (non-empty)user_proxy_config OR proxyid for proxy; proxyid takes priority. Multi-account via platform_account[].
ads update-browser '{json}'POST /api/v2/browser-profile/updateprofile_idSame fields as create + tags_update_type (1=replace, 2=append)
ads delete-browser '{json}'POST /api/v2/browser-profile/deleteprofile_id[]—
ads get-browser-list '{}'POST /api/v2/browser-profile/list—1 req/sec. CLI defaults page=1, limit=200. Loop pages by total_pages.

4.4 Profile Management

CLIPurpose
ads move-browserMove profiles to a group (group_id + user_ids[])
ads get-profile-cookies <id>Read cookies (1 req/sec)
ads get-profile-ua <id>UA for up to 10 profiles
ads new-fingerprint <id>Regenerate fingerprint for up to 10 profiles
ads delete-cache-v2 '{json}'Clear by type: local_storage, indexeddb, extension_cache, cookie, history, image_file. Profile must be closed.
ads share-profileShare to email/phone (max 200)

4.5 Groups / Tags / Proxies / Kernels / Patch

DomainCLI commandsNotes
Groupscreate-group, update-group, get-group-listgroup_name (≤30 chars, unique); get-group-list is 1 req/sec
Tagsget-tag-list, create-tag, update-tag, delete-tagColors: darkBlue/blue/purple/red/yellow/orange/green/lightGreen. Max 30 tags/profile.
Proxiescreate-proxy, update-proxy, get-proxy-list, delete-proxycreate-proxy takes a top-level JSON array. Types: http/https/ssh/socks5. Max 500/request.
Kernelsget-kernel-list, download-kernelkernel_type: Chrome/Firefox; download-kernel is 1 req/sec
Patchupdate-patchversion_type: stable (default) / beta

4.6 Inline Config Objects

user_proxy_config (for create/update-browser; ignored if proxyid given):

FieldRequiredValues
proxy_softyesbrightdata/brightauto/oxylabsauto/ipfoxyauto/kookauto/ssh/other/adspowerauto/no_proxy
proxy_typenohttp/https/socks5
proxy_host/proxy_portnoIP + port
proxy_user/proxy_passwordnoAuth
proxy_urlnoIP-change link (mobile proxies)

fingerprint_config (required, non-empty). Reddit-critical fields:

FieldDefaultRecommendation for Reddit
automatic_timezone1 (by IP)Keep 1 — matches proxy geo
webrtcdisabledproxy — prevents WebRTC IP leak revealing real IP
language_switch1 (by IP)Keep 1 — matches proxy locale
canvas/webgl_image/audio1 (noise)Keep noise on — anti-detect
screen_resolutionnonerandom for variety
browser_kernel_config—{"type":"chrome","version":"ua_auto"}
random_ua—Vary OS version per profile

Full field list: C:\Users\Administrator\AppData\Local\hermes\skills\adspower-browser\references\fingerprint-config.md.


5. Automation Capabilities — MCP vs RPA Plus

CapabilityCLI/SkillMCP ServerRPA Plus
Create/update/delete profiles✅——
Open/close browser profiles✅—✅ (New Browser op)
Manage groups/tags/proxies/kernels✅——
Read cookies/UA/active status✅——
Navigate to URL inside browser❌✅ navigate✅ (Access Website)
Click elements / fill inputs❌✅ click-element/fill-input✅ (Click / Input)
Screenshot / read page text❌✅ screenshot/get-page-visible-text✅ (Screenshot)
Execute JS in page❌✅ evaluate-script✅ (Execute JavaScript)
Connect Playwright via WS❌✅ connect-browser-with-ws—
Variables / control flow (if, loops)❌❌ (AI decides)✅ (system/global/process vars, if, for/while)
Data processing (regex, JSON, Excel/txt)❌❌ (AI + evaluate-script)✅ (Get Data / Data Processing)
Third-party tools (captcha, sheets, AI)❌❌ (AI can call APIs)✅ (2Captcha, Google Sheet, OpenAI)
Headless execution❌✅ (via open-browser headless)✅ (per-process headless toggle)
Concurrencyn/aOne profile per AI turn (sequential)Up to 100 threads, 5,000 profiles/task
Triggered by Hermes✅✅❌ (GUI-only)
Flexibilityn/aAI decides at runtimeFixed graph (but with variables/loops)

Hybrid recommendation: MCP Server is the primary Hermes-driven layer (adaptive: AI decides what to engage, writes context-aware comments, handles errors). RPA Plus is the volume layer — once a workflow is nailed down, Hermes generates the process definition (JSON import) + pre-fills global variable defaults, a human imports it into RPA Plus, and it runs across up to 100 threads / 5,000 profiles concurrently.


6. Profile/Group/Proxy Management Procedures

6.1 Provisioning N Reddit Profiles (CLI)

# 1. Create a group
ads create-group '{"group_name":"reddit-marketing","remark":"GrowReach Reddit personas"}'
# → note group_id
 
# 2. (Optional) Pre-create proxies and reference by proxyid
ads create-proxy '[{"type":"http","host":"us.proxy1.com","port":"8080","proxy_user":"u1","proxy_password":"p1"},
                   {"type":"socks5","host":"us.proxy2.com","port":"1080"}]'
# → note proxy_ids
 
# 3. Create N profiles — one per Reddit account
for i in 1..N; do
  ads create-browser '{
    "name": "reddit-'$i'",
    "group_id": "<gid>",
    "platform": "reddit.com",
    "username": "<reddit_username_'$i'>",
    "password": "<reddit_password_'$i'>",
    "country": "us",
    "proxyid": "<proxy_id_'$i'>",
    "fingerprint_config": {
      "webrtc": "proxy",
      "automatic_timezone": "1",
      "language_switch": "1",
      "canvas": "1", "webgl_image": "1", "audio": "1",
      "screen_resolution": "random",
      "browser_kernel_config": {"type":"chrome","version":"ua_auto"}
    }
  }'
done
 
# 4. Tag by persona
ads create-tag '{"tags":[{"name":"saas-founder","color":"blue"}]}'
ads update-browser '{"profile_id":"<id>","profile_tag_ids":["<tag_id>"],"tags_update_type":"1"}'

6.2 Periodic Maintenance

TaskCommandCadence
Rotate fingerprintads new-fingerprint <id> (batch 10)Weekly
Clear cookies/historyads delete-cache-v2 '{"profile_id":["..."],"type":["cookie","history","local_storage"]}'Between campaigns or on ban suspicion
Audit profile listads get-browser-list '{"group_id":"<gid>","limit":200}' (loop pages)Weekly
Check active statusads get-browser-active <id> (use active, not list — faster)Per session

6.3 Emergency Stop

ads close-all-profiles   # close everything on this device

7. Reddit Workflow — End-to-End Loop

  1. Prepare: proxies created, group created, N profiles provisioned (§6.1).
  2. For each profile (sequential via MCP, or bulk via RPA Plus):
    • ads open-browser <profile_id> → returns ws.puppeteer
    • MCP attaches Playwright via the ws endpoint
    • navigate to Reddit post URL
    • (Login if needed — fill username/password, handle 2FA)
    • click-element upvote arrow
    • fill-input comment box + comment text (AI-authored)
    • click-element submit
    • screenshot for proof
    • ads close-browser <profile_id>
  3. Human-like pacing: randomized delays between actions (see integration plan §Phase 4).
  4. Log outcome per profile (success/banned/captcha) to task log.

8. Key Risks & Open Questions

RiskMitigationStatus
AdsPower desktop-only — can’t run on Linux VPSRun on Windows host reachable from Hermes VPS Resolved: AdsPower runs directly on the Windows VPS alongside Hermes✅ Done
MCP env-var names for remote LocalAPI endpointN/A — MCP server runs on the same machine as AdsPower (localhost)✅ Done
API verification disabled = security trade-offOnly disable for trusted profiles; keep Bearer token; firewall :50325 to VPS IP onlyRequired for MCP
Reddit anti-manipulationUnique proxy per profile, human-like delays, fingerprint rotation, avoid identical comment text, limit actions/account/dayOperational discipline
AdsPower rate limit (2 req/sec for <200 profiles)Queue profile opens with 0.6s spacing; never poll list at >1/secBuilt into orchestration
RPA Plus has no external APIUse MCP for Hermes-driven work; RPA Plus stays human-triggered for bulkAccepted
Exact MCP tool surfaceDiscovered via hermes mcp test adspower — 47 mcp__adspower__* tools confirmed✅ Done

9. File Index

FileContents
00-master-kb.mdThis file — unified reference
01-local-api.mdREST API: 43 endpoints, auth, rate limits, config objects
02-cli-skill.mdads CLI: 32 commands, intent mapping, CLI≠automation boundary
03-mcp-rpa.mdMCP Server + RPA Plus: architecture, Hermes integration, hybrid recommendation
04-integration-plan.md5-phase actionable integration plan
05-profile-recommendation.mdHermes profile setup for the AdsPower operator
06-rpa-plus-reference.mdRPA Plus comprehensive reference (editor, operations, variables, control flow, sharing, tasks)
07-synchronizer.mdSynchronizer multi-window sync control

Skill reference files: C:\Users\Administrator\AppData\Local\hermes\skills\adspower-browser eferences\ (14 files).