AutoGrowth Developers

Run your phones from an AI agent.

A hosted MCP server and a REST API. Your agent can run automations, watch each run and tell you why one failed.

Works with
  • Claude
  • Claude Code
  • Cursor
  • Any MCP client

Included with every plan. Nothing to install.

Agent consoleSample data

YouWarm up every online iPhone for 20 minutes, then show me the first run.

  1. get_automation { automationId: "warmup-instagram" }Result: Warmup. Inputs: account, duration (5 to 30)
  2. list_devices {}Result: 12 phones, 11 online, every slot active
  3. bulk_run_automations { executions: [11 × { automationId, deviceId, inputValues: { duration: "20" } }] }Result: 11 executions started, one per phone
  4. watch_run { executionId: "0199a3d8…9e47", since: 0 }Result: processing, step 4: scrolling the feed. Screen attached

AgentAll 11 online phones are warming up. Shelf 05 is offline, so I left it out.

YouWhy did last night’s post fail on Shelf 07? Show me the screen where it stopped.

  1. list_schedules { deviceId: "0199a3c2…1b30", status: ["failed"] }Result: 1 failed: Post, 02:14
  2. get_execution_logs { executionId: "0199a1f0…07c1" }Result: script-log, error-screenshot, error-source
  3. read_execution_log { executionId: "0199a1f0…07c1", file: "error-screenshot" }Result: Stopped at step 9. A pop-up covered the Share button

AgentA pop-up covered Share at step 9. Want me to run it again at 09:00?

YouOpen TikTok on Shelf 03 and tap the search bar.

  1. list_apps { deviceId: "0199a3c2…5e10" }Result: 14 apps. TikTok is com.zhiliaoapp.musically
  2. open_app { deviceId, bundleId: "com.zhiliaoapp.musically" }Result: Opened
  3. observe_phone { deviceId, include: ["screenshot", "elements"] }Result: Screenshot and 41 elements. Search is e12
  4. act { deviceId, kind: "tap", elementId: "e12", observationId }Result: Tapped. New screen attached

AgentSearch is open on Shelf 03. What should I look up?

Setup

Connect in one line

Paste one URL into your AI client. Nothing to install, no key to copy.

Terminal
claude mcp add --transport http autogrowth https://mcp.autogrowth.farm
  1. Run it in your terminal.
  2. Start Claude Code, type /mcp and pick autogrowth.
  3. Your browser opens the approval page. Press Allow Access.
Connector URL
https://mcp.autogrowth.farm
  1. In claude.ai or Claude Desktop, open Settings, then Connectors.
  2. Choose Add custom connector and paste the URL. The name you give it becomes the name of the key.
  3. Press Connect, then Allow Access in your browser.
.cursor/mcp.json
{
  "mcpServers": {
    "autogrowth": {
      "url": "https://mcp.autogrowth.farm"
    }
  }
}
  1. Add it to ~/.cursor/mcp.json for every project, or .cursor/mcp.json for one.
  2. Cursor picks it up when you save and asks you to sign in.
Settings
Server URL     https://mcp.autogrowth.farm
Transport      Streamable HTTP, at the root path
Authorization  OAuth 2.0 authorization code with PKCE (S256)
Registration   Dynamic: the server registers your client
Metadata       https://mcp.autogrowth.farm/.well-known/oauth-authorization-server
  1. Any client that speaks Streamable HTTP and OAuth 2.0 works. No client secret.
  2. Stdio-only clients cannot connect: there is no local binary to wrap.

You approve the client once in your dashboard. Delete its key there to disconnect.

MCP server

74 tools in seven areas

Every tool acts as you, with your role and permissions.

Devices and phone control

16 tools

List your phones and their containers, tag them, and drive one by hand: open and close apps, read the screen, tap, swipe and type, and send media to its gallery.

  • list_devices
  • get_device_containers
  • create_containers
  • delete_container
  • set_device_tags
  • list_tags
  • create_tag
  • update_tag
  • delete_tag
  • list_apps
  • open_app
  • kill_app
  • observe_phone
  • act
  • send_media_to_phone
  • get_media_push

Automations and runs

9 tools

Read the built-in catalog and the inputs each automation takes, run one now or up to 100 at once, and follow every run step by step with the screen at each step.

  • list_automations
  • get_automation
  • run_automation
  • bulk_run_automations
  • list_runs
  • get_run
  • watch_run
  • stop_run
  • get_run_artifact

Schedules and workflows

16 tools

Schedule runs for a set time, one or up to 100 at once, check a phone for overlaps first, read why a run failed, and set up daily routines.

  • schedule_automation
  • bulk_schedule_automations
  • check_conflicts
  • list_schedules
  • get_execution
  • get_execution_logs
  • read_execution_log
  • cancel_execution
  • delete_execution
  • list_workflows
  • get_workflow
  • create_workflow
  • update_workflow
  • pause_workflow
  • resume_workflow
  • delete_workflow

Media and collections

13 tools

Upload from a public URL, a local file or inline bytes, sort media into collections, star it, and check how much storage is left.

  • upload_media
  • create_media_upload
  • complete_media_upload
  • list_media
  • star_media
  • delete_media
  • get_storage
  • list_collections
  • get_collection
  • create_collection
  • update_collection
  • delete_collection
  • move_media

Accounts

10 tools

Track social accounts, read their follower and run history, pause or resume their stats, and set which phones an account lives on.

  • list_accounts
  • get_account
  • get_account_history
  • list_account_runs
  • add_social_account
  • update_account
  • delete_account
  • pause_account
  • resume_account
  • bind_account_devices

Prompts

5 tools

Reusable text that an automation input can point at. Create, read, update and delete it.

  • list_prompts
  • get_prompt
  • create_prompt
  • update_prompt
  • delete_prompt

Identity, docs and stats

5 tools

See whose key the agent holds and what it may do, search and read the AutoGrowth docs, read fleet counters, and test a proxy.

  • get_me
  • search_docs
  • read_doc
  • get_stats
  • check_proxy

Billing, team and settings stay in the dashboard.

REST API

Or call it from your own code

The same actions over HTTPS, for your own scripts. Bearer key in, JSON out.

Base URL
https://api.autogrowth.farm/v1

Devices

  • GET/devices
  • GET/devices/{id}/containers
  • GET/devices/{id}/apps
  • POST/devices/{id}/observe
  • POST/devices/{id}/act

Automations and runs

  • GET/automations
  • GET/automations/{id}
  • GET/automations/runs
  • POST/automations/runs/{executionId}/stop

Executions

  • POST/executions
  • POST/executions/bulk
  • POST/executions/check-conflicts
  • GET/executions/{id}/logs
  • PATCH/executions/{id}/cancel

Content

  • POST/content/uploads
  • POST/content/uploads/{uploadId}/complete
  • GET/content/storage

Plus accounts, workflows, collections, prompts, tags, stats and /me.

POST/v1/executions
curl -X POST https://api.autogrowth.farm/v1/executions \
  -H "Authorization: Bearer $AUTOGROWTH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "automationId": "warmup-instagram",
    "deviceId": "0199a3c2-5e10-7b4d-9a61-2f8e4c7d1b30",
    "scheduledAt": "2026-10-15T09:00:00Z",
    "inputValues": { "duration": "20" }
  }'
const res = await fetch('https://api.autogrowth.farm/v1/executions', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.AUTOGROWTH_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    automationId: 'warmup-instagram',
    deviceId,
    scheduledAt: '2026-10-15T09:00:00Z',
    inputValues: { duration: '20' },
  }),
})
const { execution, conflicts } = await res.json()
import os, requests

res = requests.post(
    "https://api.autogrowth.farm/v1/executions",
    headers={"Authorization": f"Bearer {os.environ['AUTOGROWTH_API_KEY']}"},
    json={
        "automationId": "warmup-instagram",
        "deviceId": device_id,
        "scheduledAt": "2026-10-15T09:00:00Z",
        "inputValues": {"duration": "20"},
    },
)
execution = res.json()["execution"]
201 CreatedSample response
{
  "execution": {
    "id": "0199a3d8-41f2-7c09-b6e3-8d5a2f1c9e47",
    "userId": "0198e2b7-0c44-7d1e-a3f0-6b9c8d7e5a12",
    "type": "automation",
    "engineAutomationId": "0198f8a0-77c1-7e2a-9b40-5c3d2e1f0a96",
    "status": "pending",
    "scheduledAt": "2026-10-15T09:00:00.000Z",
    "deviceId": "0199a3c2-5e10-7b4d-9a61-2f8e4c7d1b30",
    "inputValues": { "duration": "20" },
    "createdAt": "2026-10-14T18:32:05.114Z",
    "updatedAt": "2026-10-14T18:32:05.114Z"
  },
  "conflicts": []
}

Keys and limits

The same rules as the dashboard

Your agent or code can do what you can do in the dashboard, and nothing more.

API keys

Make a key in Settings, Developer API.

What a key can see

Each key acts as the user who made it.

On your phones

Runs still happen on your phones, while the desktop app is open.

Limits

Limits and error codes are in the docs.

Ready when your phones are.

Plug them in and run every account from one dashboard.

Build your farm

From $99.95 a month. Cancel any time in Billing.

1,500+ in our Telegram and Discord <3