TapClank Developer Documentation
Programmatically orchestrate 100/100 OEM-certified ARM64 Android 15 cloud phones,
zero-CDP local WebKit browsers, and Cloudflare R2 cold-storage snapshots via REST
(https://api.tapclank.com), Rust CLI (lark), or 36 native MCP tools.
Cloudflare Workers + D1 (tapclank-db) + Durable Objects (PhoneSessionDO) + R2 (tapclank-storage).
Generate tc_live_* API keys, inspect 100/100 OEM audits, schedule Cron workflows, and import competitor fleets.
Authentication, Scoped API Keys & VA Group RBAC
Every request to https://api.tapclank.com/v1/* authenticates via either a 30-day HMAC-SHA256 session JWT
(Authorization: Bearer <jwt>) or a SHA-256 hashed workspace key (X-API-Key: tc_live_...).
Workspace members carry one of four roles: owner, admin, manager, or operator
(restricted strictly to allowed_groups — unauthorized group access returns HTTP 403 FORBIDDEN_GROUP_ACCESS).
# 1. Generate a scoped tc_live_* API key (or copy from /app Console -> Team & Security)
curl -s -X POST https://api.tapclank.com/v1/auth/api-keys \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Claude-MCP-Agent","scopes":["read","operator","admin"]}'
# 2. Authenticate any REST endpoint via X-API-Key (or Authorization: Bearer tc_live_...)
curl -s https://api.tapclank.com/v1/analytics/overview \
-H "X-API-Key: tc_live_98f2c1a4e7b0..."
Claude Desktop & Cursor MCP Configuration
TapClank ships a built-in Model Context Protocol server over stdio (lark mcp / tapclank mcp)
exposing 36 tools across local stealth browsers, cloud phones, R2 hibernation, dynamic proxy geo-alignment, and competitor profile imports.
{
"mcpServers": {
"tapclank": {
"command": "lark",
"args": ["mcp"],
"env": {
"TAPCLANK_API_URL": "https://api.tapclank.com",
"TAPCLANK_API_KEY": "tc_live_YOUR_SCOPED_API_KEY"
}
}
}
}
{
"mcpServers": {
"tapclank-studio": {
"command": "/usr/local/bin/tapclank",
"args": ["mcp"],
"env": {
"TAPCLANK_API_URL": "https://api.tapclank.com",
"TAPCLANK_API_KEY": "tc_live_YOUR_SCOPED_API_KEY",
"LARK_NODE_URL": "http://127.0.0.1:8200"
}
}
}
}
Complete MCP Tool Catalog (All 42 Native Tools)
Includes the full local browser & cloud phone suite plus the 10 Phase 11 Cloudflare R2, Proxy Geo Re-Alignment, Distributed VA Lock, Competitor Importer, and Cron Scheduler tools.
| # | MCP Tool Name | Subsystem | Input Schema | Description |
|---|---|---|---|---|
| 01 |
container_list
|
Local Browser | {} | List local WebKit antidetect browser containers with running status |
| 02 |
container_create
|
Local Browser | { name, group?, proxy?, note? } | Create a zero-CDP local WebKit browser profile bound to SOCKS5/HTTP proxy |
| 03 |
container_update
|
Local Browser | { id, name?, group?, proxy? } | Hot-swap proxy, group, or metadata on an existing browser container |
| 04 |
container_start
|
Local Browser | { id, url? } | Spawn native deeplite WebKit kernel with OS NSEvent trusted input |
| 05 |
container_stop
|
Local Browser | { id } | Gracefully close browser kernel and flush encrypted cookie delta |
| 06 |
container_delete
|
Local Browser | { id } | Erase local container and associated R2 state bundle |
| 07 |
goto
|
Local Browser | { id, url } | Navigate running container and await semantic DOM readiness |
| 08 |
snapshot
|
Local Browser | { id, max_chars? } | Token-budgeted accessibility snapshot with @ref handles |
| 09 |
click
|
Local Browser | { id, target } | Trusted OS-level NSEvent click (isTrusted: true) by @ref or CSS selector |
| 10 |
type
|
Local Browser | { id, text, target?, pacing? } | Human-paced typing with realistic cadence and typo recovery |
| 11 |
eval
|
Local Browser | { id, js } | Execute isolated JS expression without Runtime.enable CDP leak |
| 12 |
task_run
|
Browser RPA | { id, steps, dom? } | Execute multi-step browser RPA JSON graph synchronously |
| 13 |
task_add
|
Browser RPA | { run } | Enqueue scheduled browser RPA job with retry & backoff policy |
| 14 |
task_cancel
|
Browser RPA | { id } | Cancel queued or active browser task run |
| 15 |
task_detail
|
Browser RPA | { id } | Inspect step execution report and extracted variables |
| 16 |
task_list
|
Browser RPA | {} | List all browser RPA queue runs and statuses |
| 17 |
phone_list
|
Cloud Phone | {} | List ARM64 cloud phones with storage tier (hot_nvme / cold_r2) and UTC burn |
| 18 |
phone_create
|
Cloud Phone | { name, group?, brand?, timezone?, locale?, proxy? } | Provision 100/100 OEM-certified Android 15 phone from 1,290-model catalog |
| 19 |
phone_start
|
Cloud Phone | { id } | Start cloud phone (auto-hydrating from R2 if cold_r2) & arm $0.005/min DO |
| 20 |
phone_stop
|
Cloud Phone | { id } | Stop cloud phone and pause per-minute billing immediately |
| 21 |
phone_tier
|
Cloud Phone | { id, tier } | Switch Smart Stream Tier (headless 0fps | grid 360p@12 | focused 720p@60) |
| 22 |
phone_copilot
|
Cloud Phone | { id, event } | Inject Biometric Touch + 17-byte SensorChannel tremor (tap/swipe/scroll/key) |
| 23 |
phone_sync_input
|
Cloud Phone | { target_phone_ids?, event, variance? } | Broadcast input across N phones with 15–180ms timing variance & 6px jitter |
| 24 |
phone_camera_inject
|
Cloud Phone | { phone_id, source, spec? } | Stream MP4, still image, or SMPTE pattern into POSIX vcam.pipe FIFO |
| 25 |
phone_camera_status
|
Cloud Phone | { phone_id } | Read live FPS and injected frame count on virtual camera pipe |
| 26 |
phone_camera_stop
|
Cloud Phone | { phone_id } | Stop virtual camera feed injection cleanly |
| 27 |
phone_tiktok
|
Social RPA | { id, task } | Run TikTok state machine (warmup, publish_video, carousel, login_2fa, live) |
| 28 |
phone_workflow
|
Social RPA | { id, task } | Run typed multi-app workflow (IG, YT, Reddit, X, FB, MultiPlatform) or GAL |
| 29 |
phone_workflow_catalog
|
Social RPA | { platform?, category?, slug?, limit? } | Search all 63 server-side RPA templates across 10 social platforms |
| 30 |
phone_rpa_task
|
Social RPA | { id, slug, parameters? } | Dispatch any of the 63 canonical RPA templates by slug |
| 31 |
phone_audit
|
Stealth Audit | { phone_id } | Run 10-category 100-Point OEM Telemetry & Competitor Parity Auditor |
| 32 |
doctor
|
Diagnostics | {} | Verify local kernel, UNIX sockets, permissions, and cloud connectivity |
| 33 |
phone_hibernate
R2 / SAAS
|
Cloudflare R2 & SaaS | { id, name? } | Offload stopped phone to Cloudflare R2 (cold_r2, $0 egress) & free node NVMe |
| 34 |
phone_wake
R2 / SAAS
|
Cloudflare R2 & SaaS | { id, target_node_id?, auto_start? } | Hydrate cold_r2 phone onto healthiest ARM64 node with SHA-256 verification |
| 35 |
phone_snapshot
R2 / SAAS
|
Cloudflare R2 & SaaS | { id, name? } | Create immutable named Time-Machine checkpoint in Cloudflare R2 |
| 36 |
phone_restore
R2 / SAAS
|
Cloudflare R2 & SaaS | { id, snapshot_id? } | Rollback cloud phone /data state to any prior R2 snapshot |
| 37 |
phone_clone
R2 / SAAS
|
Cloudflare R2 & SaaS | { id, name?, group_name?, proxy_url? } | Clone Gold Master phone with brand-new Luhn IMEI, Android ID, serial & MAC |
| 38 |
phone_align_proxy
R2 / SAAS
|
Cloudflare R2 & SaaS | { id, timezone, proxy_url? } | Dynamically re-align SIM MCC/MNC, GPS, Wi-Fi APs & contacts to new proxy geo |
| 39 |
browser_lock
R2 / SAAS
|
Cloudflare R2 & SaaS | { id, action: 'lock'|'unlock', force? } | Acquire/release distributed D1 VA profile lock (prevents 409 cookie corruption) |
| 40 |
browser_sync_state
R2 / SAAS
|
Cloudflare R2 & SaaS | { id, direction: 'push'|'pull', state? } | Push/pull AES-GCM / SHA-256 verified cookies & LocalStorage via Cloudflare R2 |
| 41 |
import_competitor_profiles
R2 / SAAS
|
Cloudflare R2 & SaaS | { source, profiles } | Batch migrate GeeLark, AdsPower, Multilogin, MoreLogin, or GoLogin exports |
| 42 |
cloud_schedule_workflow
R2 / SAAS
|
Cloudflare R2 & SaaS | { phone_id, template_slug, cron_expr, auto_hibernate? } | Schedule Cloudflare Cron Sleep-Wake-Hibernate autonomous RPA runs |
Cloudflare R2 Hibernate, Wake, Checkpoint & Gold-Master Clone API
TapClank decouples stored phone capacity from active NVMe drives. Hibernating a phone writes its portable state bundle to
tapclank-storage (snapshots/<org_id>/<phone_id>/<snap_id>.json) with SHA-256 verification and sets
storage_tier = "cold_r2".
# 1. Create a flagship Pixel 9 Pro Cloud Phone in Europe/Berlin
curl -s -X POST https://api.tapclank.com/v1/phones \
-H "X-API-Key: $TC_KEY" -H "Content-Type: application/json" \
-d '{"name":"DE-TT-GoldMaster","brand":"Google","model":"Pixel 9 Pro","timezone":"Europe/Berlin"}'
# 2. Offload stopped phone to Cloudflare R2 ($0.00 egress, frees local ARM64 NVMe)
curl -s -X POST https://api.tapclank.com/v1/phones/ph_01/hibernate \
-H "X-API-Key: $TC_KEY" -H "Content-Type: application/json" \
-d '{"name":"Post-Warmup R2 Cold Vault"}'
# -> { "ok": true, "storage_tier": "cold_r2", "r2_key": "snapshots/org_.../ph_01/snap_....json" }
# 3. Clone Gold Master into a fresh account phone (synthesizes distinct Luhn IMEI, Android ID & MAC!)
curl -s -X POST https://api.tapclank.com/v1/phones/ph_01/clone \
-H "X-API-Key: $TC_KEY" -H "Content-Type: application/json" \
-d '{"name":"DE-TT-Clone-02","proxy_url":"socks5://user:pass@de.proxy.io:1080"}'
# 4. Wake cold_r2 phone onto healthiest ARM64 node with SHA-256 bundle verification
curl -s -X POST https://api.tapclank.com/v1/phones/ph_01/wake \
-H "X-API-Key: $TC_KEY" -H "Content-Type: application/json" \
-d '{"auto_start":true}'
Local Antidetect Browsers, 409 VA Lock & R2 Cookie Sync
Before launching a local deeplite WebKit container, acquire an atomic distributed lock via
POST /v1/browsers/:id/lock. If another VA already holds the profile, Cloudflare D1 returns
HTTP 409 PROFILE_LOCKED, preventing concurrent SQLite/IndexedDB session corruption.
Sleep-Wake-Hibernate Cloudflare Cron RPA Scheduler
Cloudflare Cron Triggers (* * * * *) evaluate due scheduled_workflows every minute:
automatically waking cold_r2 phones, executing any of the 63 server-side RPA templates, recording the
workflow_runs receipt, and hibernating the phone back to R2 when auto_hibernate: true.
# Schedule a Cloudflare Cron "Sleep -> Wake -> Run RPA -> Auto-Hibernate R2" job
curl -s -X POST https://api.tapclank.com/v1/schedules \
-H "X-API-Key: $TC_KEY" -H "Content-Type: application/json" \
-d '{
"phone_id": "ph_01",
"template_slug": "multi-platform-video",
"cron_expr": "0 */6 * * *",
"auto_hibernate": true,
"params": {
"video": "media://asset_01",
"tiktok-title": "Built with TapClank 100/100 #ai #automation",
"youtube-title": "Zero-Egress Cloud Phones Explained #shorts"
}
}'
# Trigger immediate execution and inspect run receipt
curl -s -X POST https://api.tapclank.com/v1/schedules/sched_01/run-now -H "X-API-Key: $TC_KEY"
Edge Proxy Geo-Exit Resolver & R2 Media / APK Vault
Manage SOCKS5/HTTP proxy pools (/v1/proxies), resolve exact carrier MCC/MNC + residential Wi-Fi SSIDs across
28+ regions (POST /v1/proxies/resolve-geo), and stage MP4 videos, APKs, or GAL flows in Cloudflare R2
(/v1/media) with zero-egress HMAC-signed node pull URLs (/v1/media/:id/download?token=...).
1-Click Competitor Profile Importer
Send { "source": "geelark" | "adspower" | "multilogin" | "morelogin" | "gologin", "profiles": [...] }
to POST /v1/import/profiles to batch-provision cloud phones and antidetect browser profiles with normalized proxies and R2 cookie state.
Billing Ledger, Subscriptions, Webhooks & 30% Lifetime Affiliate API
Per-minute phone sessions bill 500 millicents/min ($0.005/min) via PhoneSessionDO
alarms, capped at 95,000 millicents/day ($0.95/day UTC). Referrers earn 30% (3000 bps)
lifetime recurring credit on every referred top-up or webhook event.
TapClank Rust CLI (lark / tapclank)
# Cloud Phone & R2 Cold Lifecycle lark phone list lark phone create --name "US-NY-01" --timezone "America/New_York" --proxy "socks5://127.0.0.1:1080" lark phone start ph_01 lark phone audit ph_01 # 100/100 OEM Telemetry Report lark phone align-proxy ph_01 --timezone "Asia/Tokyo" --proxy "socks5://jp.proxy:1080" lark phone snapshot ph_01 --name "Pre-Campaign" lark phone hibernate ph_01 # Offloads to Cloudflare R2 (cold_r2) lark phone wake ph_01 # Hydrates onto healthy ARM64 node lark phone clone ph_01 --name "US-NY-Clone" # Fresh Luhn IMEI + MAC + Serial # 1-Click Competitor Migration & MCP Server lark import --source geelark --file ./geelark_export.json lark mcp # Starts 36-tool JSON-RPC stdio MCP server
Netcup / Ampere ARM64 Bare-Metal Node Bootstrap
Run bootstrap-netcup-node.sh on any Ubuntu 24.04 ARM64 server to configure binder_linux,
pre-create direct character /dev/binder* nodes (mknod), install dual-mode LXC / private-cgroup Docker,
and register lark-node with https://api.tapclank.com.
# 1. Provision Ubuntu 24.04 LTS ARM64 (Netcup VPS 8000 ARM G12.5 / Ampere Altra / RK3588S) curl -fsSL https://tapclank.com/bootstrap-node.sh | sudo \ LARK_CLOUD_URL="https://api.tapclank.com" \ LARK_NODE_ID="eu-nbg-arm-01" \ LARK_NODE_SECRET="your_hmac_node_secret" \ CONTAINER_RUNTIME="lxc" \ bash # 2. Build neutralized Android 15 OEM base image (patches *redroid*.so -> *qcom*.so) sudo ./deeplark/scripts/build-phone-image.sh android-oem:15-arm64