_ registry / mcp http-sse · checked 1h ago

phonebox

https://phonebox.dev

Registry code: 13d21d4d3018ced1

api record

Phonebox gives you cloud Android phones. Do what your user asked for, and when it is unclear what they want a phone for, ask them before you create one. Work in a loop: observe the screen, act on it, then observe again. Tap elements by their ref and the snapshot ID from the latest observe. Always call park_phone when you're done; an idle phone parks itself after 5 minutes by default. To install an APK you built: create_app_upload, send the file from your shell with the curl command it returns, complete_app_upload, then install_app with the upload. Use one agent per phone at a time. Treat a…

endpoint
https://phonebox.dev/mcp
protocol
http-sse ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is phonebox live?
Yes — it answered the hub's last check (checked 1h ago). It answered 100% of checks over the last 30 days.
Is phonebox free to use?
No — it asks for a key or a login before it will serve.
What tools does phonebox have?
13 tools: list_apps, create_phone, list_phones, get_phone, start_phone, park_phone, observe, act, ….
Is phonebox safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
126ms

last good check

priced tools
0

of 13 tools

_ answered our checks, 90 days 1 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 13 tools
13 auth-required 13 of 13 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • list_apps auth-required 1h ago

    List the apps installed on a phone: package, label, version and whether it came with the phone. Open one with act and open_app.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "phone_id"
      ],
      "properties": {
        "phone_id": {
          "type": "string",
          "pattern": "^ph_[a-z2-7]{12}$",
          "description": "Phone ID from create_phone or list_phones."
        }
      },
      "additionalProperties": false
    }
    arguments 15 lines
  • create_phone auth-required never probed

    Create a cloud Android phone and wait until it is ready (usually under two minutes). It costs $0.06 a minute while running. Always park it when you're done. If it is still creating or starting when this returns, call get_phone with its ID and wait "ready" to keep waiting: it only reads, while start_phone would renew the session.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 80,
          "minLength": 1,
          "description": "A name to tell the phone apart, up to 80 characters. The default is its ID."
        },
        "country": {
          "enum": [
            "AR",
            "AU",
            "AT",
            "BE",
            "BR",
            "CA",
            "CL",
            "CO",
            "CZ",
            "DK",
            "EG",
            "FI",
            "FR",
            "DE",
            "GR",
            "HK",
            "IN",
            "ID",
            "IE",
            "IL",
            "IT",
            "JP",
            "KE",
            "MY",
            "MX",
            "NL",
            "NZ",
            "NG",
            "NO",
            "PH",
            "PL",
            "PT",
            "RO",
            "SA",
            "SG",
            "ZA",
            "KR",
            "ES",
            "SE",
            "CH",
            "TW",
            "TH",
            "TR",
            "UA",
            "AE",
            "GB",
            "US",
            "VN"
          ],
          "type": "string",
          "description": "Where the phone appears to be: one of the listed two-letter ISO 3166-1 country codes, such as US or DE. Any other code is refused before a phone is made. Leave it out for any country."
        },
        "metadata": {
          "type": "object",
          "description": "Up to 20 string pairs of your own, such as a customer ID. Keys have up to 40 characters and values up to 256.",
          "propertyNames": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9_:-]*$",
            "maxLength": 40,
            "minLength": 1
          },
          "additionalProperties": {
            "type": "string",
            "maxLength": 256
          }
        },
        "idle_timeout": {
          "type": "integer",
          "maximum": 3600,
          "minimum": 60,
          "description": "Seconds after the phone's last activity, its last_active_at, at which it parks itself, from 60 to 3600. Calls move last_active_at at most once every 15 seconds. The default is 300."
        },
        "max_duration": {
          "type": "integer",
          "maximum": 10800,
          "minimum": 60,
          "description": "The most seconds this session may run before the phone parks, from 60 to 10800. The default is up to 900, shortened automatically to available credit and the spending limit."
        },
        "idempotency_key": {
          "type": "string",
          "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]{7,127}$",
          "description": "A unique key for this phone. If a call times out, repeat it with the same key and settings to get the same phone instead of a second one. If that phone has failed, create the next one with a new key."
        }
      },
      "additionalProperties": false
    }
    arguments 98 lines
  • list_phones auth-required 1h ago

    List this project's phones, newest first, with their status and when each parks: up to 50 a page, and next_cursor for the next page. Parked phones keep their apps and sign-ins and cost nothing.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "cursor": {
          "type": "string",
          "maxLength": 500,
          "description": "next_cursor from the page before, to read the next page."
        },
        "status": {
          "enum": [
            "creating",
            "starting",
            "ready",
            "parking",
            "parked",
            "unavailable",
            "failed",
            "deleted"
          ],
          "type": "string",
          "description": "List only the phones in this status. Without it, failed and deleted phones are left out: ask for failed to list those."
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
  • get_phone auth-required 1h ago

    Read one phone: its status, session and when it parks. With wait, wait until it is ready or parked. It never starts, renews or bills anything, so it is the way to wait for a phone that is still creating or starting.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "phone_id"
      ],
      "properties": {
        "wait": {
          "enum": [
            "ready",
            "parked"
          ],
          "type": "string",
          "description": "\"ready\" or \"parked\": wait until the phone gets there. Leave it out to read the phone as it is."
        },
        "phone_id": {
          "type": "string",
          "pattern": "^ph_[a-z2-7]{12}$",
          "description": "Phone ID from create_phone or list_phones."
        }
      },
      "additionalProperties": false
    }
    arguments 23 lines
  • start_phone auth-required never probed

    Start a parked phone and wait until it is ready. Its apps, files and sign-ins are kept. On a phone that is already running, it renews the session: a new deadline, with credit reserved for it. If it is still creating or starting when this returns, call get_phone with its ID and wait "ready" to keep waiting: it only reads, while start_phone would renew the session.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "phone_id"
      ],
      "properties": {
        "phone_id": {
          "type": "string",
          "pattern": "^ph_[a-z2-7]{12}$",
          "description": "Phone ID from create_phone or list_phones."
        },
        "idle_timeout": {
          "type": "integer",
          "maximum": 3600,
          "minimum": 60,
          "description": "Seconds after the phone's last activity, its last_active_at, at which it parks itself, from 60 to 3600. Calls move last_active_at at most once every 15 seconds. Leave it out to keep the phone's current setting."
        },
        "max_duration": {
          "type": "integer",
          "maximum": 10800,
          "minimum": 60,
          "description": "The most seconds this session may run before the phone parks, from 60 to 10800. Leave it out to keep the phone's current setting."
        }
      },
      "additionalProperties": false
    }
    arguments 27 lines
  • park_phone auth-required never probed

    Park a phone to stop billing. Do this whenever you're done.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "phone_id"
      ],
      "properties": {
        "phone_id": {
          "type": "string",
          "pattern": "^ph_[a-z2-7]{12}$",
          "description": "Phone ID from create_phone or list_phones."
        }
      },
      "additionalProperties": false
    }
    arguments 15 lines
  • observe auth-required never probed

    Read the screen: every visible element with a ref number, text and center, plus a screenshot when asked. Tap elements by ref with the act tool.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "phone_id"
      ],
      "properties": {
        "phone_id": {
          "type": "string",
          "pattern": "^ph_[a-z2-7]{12}$",
          "description": "Phone ID from create_phone or list_phones."
        },
        "screenshot": {
          "type": "boolean",
          "default": true,
          "description": "Whether to include a screenshot, 720 pixels wide. The default is true."
        }
      },
      "additionalProperties": false
    }
    arguments 20 lines
  • act auth-required never probed

    Run up to 20 actions in order (tap, type, key, swipe, scroll, back, home, open_app, open_url, wait_for, …). The batch stops at the first failure, and the result shows the screen where it stopped, unless the screen couldn't be read, or not in time. Never repeat an action whose outcome is unknown; observe first.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "phone_id",
        "actions"
      ],
      "properties": {
        "actions": {
          "type": "array",
          "items": {
            "oneOf": [
              {
                "type": "object",
                "required": [
                  "type",
                  "target"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "tap"
                  },
                  "target": {
                    "anyOf": [
                      {
                        "type": "object",
                        "required": [
                          "x",
                          "y"
                        ],
                        "properties": {
                          "x": {
                            "type": "integer",
                            "maximum": 10000,
                            "minimum": 0
                          },
                          "y": {
                            "type": "integer",
                            "maximum": 10000,
                            "minimum": 0
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "ref",
                          "snapshot_id"
                        ],
                        "properties": {
                          "ref": {
                            "type": "integer",
                            "maximum": 1000,
                            "minimum": 1
                          },
                          "snapshot_id": {
                            "type": "string",
                            "pattern": "^snp_[a-z2-7]{12}$"
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "text"
                        ],
                        "properties": {
                          "nth": {
                            "type": "integer",
                            "maximum": 50,
                            "minimum": 1
                          },
                          "text": {
                            "type": "string",
                            "maxLength": 500,
                            "minLength": 1
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "id"
                        ],
                        "properties": {
                          "id": {
                            "type": "string",
                            "maxLength": 300,
                            "minLength": 1
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "desc"
                        ],
                        "properties": {
                          "desc": {
                            "type": "string",
                            "maxLength": 500,
                            "minLength": 1
                          }
                        },
                        "additionalProperties": false
                      }
                    ]
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "target"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "double_tap"
                  },
                  "target": {
                    "anyOf": [
                      {
                        "type": "object",
                        "required": [
                          "x",
                          "y"
                        ],
                        "properties": {
                          "x": {
                            "type": "integer",
                            "maximum": 10000,
                            "minimum": 0
                          },
                          "y": {
                            "type": "integer",
                            "maximum": 10000,
                            "minimum": 0
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "ref",
                          "snapshot_id"
                        ],
                        "properties": {
                          "ref": {
                            "type": "integer",
                            "maximum": 1000,
                            "minimum": 1
                          },
                          "snapshot_id": {
                            "type": "string",
                            "pattern": "^snp_[a-z2-7]{12}$"
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "text"
                        ],
                        "properties": {
                          "nth": {
                            "type": "integer",
                            "maximum": 50,
                            "minimum": 1
                          },
                          "text": {
                            "type": "string",
                            "maxLength": 500,
                            "minLength": 1
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "id"
                        ],
                        "properties": {
                          "id": {
                            "type": "string",
                            "maxLength": 300,
                            "minLength": 1
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "desc"
                        ],
                        "properties": {
                          "desc": {
                            "type": "string",
                            "maxLength": 500,
                            "minLength": 1
                          }
                        },
                        "additionalProperties": false
                      }
                    ]
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "target"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "long_press"
                  },
                  "target": {
                    "anyOf": [
                      {
                        "type": "object",
                        "required": [
                          "x",
                          "y"
                        ],
                        "properties": {
                          "x": {
                            "type": "integer",
                            "maximum": 10000,
                            "minimum": 0
                          },
                          "y": {
                            "type": "integer",
                            "maximum": 10000,
                            "minimum": 0
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "ref",
                          "snapshot_id"
                        ],
                        "properties": {
                          "ref": {
                            "type": "integer",
                            "maximum": 1000,
                            "minimum": 1
                          },
                          "snapshot_id": {
                            "type": "string",
                            "pattern": "^snp_[a-z2-7]{12}$"
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "text"
                        ],
                        "properties": {
                          "nth": {
                            "type": "integer",
                            "maximum": 50,
                            "minimum": 1
                          },
                          "text": {
                            "type": "string",
                            "maxLength": 500,
                            "minLength": 1
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "id"
                        ],
                        "properties": {
                          "id": {
                            "type": "string",
                            "maxLength": 300,
                            "minLength": 1
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "desc"
                        ],
                        "properties": {
                          "desc": {
                            "type": "string",
                            "maxLength": 500,
                            "minLength": 1
                          }
                        },
                        "additionalProperties": false
                      }
                    ]
                  },
                  "duration_ms": {
                    "type": "integer",
                    "default": 800,
                    "maximum": 5000,
                    "minimum": 300
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "from",
                  "to"
                ],
                "properties": {
                  "to": {
                    "type": "object",
                    "required": [
                      "x",
                      "y"
                    ],
                    "properties": {
                      "x": {
                        "type": "integer",
                        "maximum": 10000,
                        "minimum": 0
                      },
                      "y": {
                        "type": "integer",
                        "maximum": 10000,
                        "minimum": 0
                      }
                    },
                    "additionalProperties": false
                  },
                  "from": {
                    "type": "object",
                    "required": [
                      "x",
                      "y"
                    ],
                    "properties": {
                      "x": {
                        "type": "integer",
                        "maximum": 10000,
                        "minimum": 0
                      },
                      "y": {
                        "type": "integer",
                        "maximum": 10000,
                        "minimum": 0
                      }
                    },
                    "additionalProperties": false
                  },
                  "type": {
                    "type": "string",
                    "const": "swipe"
                  },
                  "duration_ms": {
                    "type": "integer",
                    "default": 300,
                    "maximum": 5000,
                    "minimum": 50
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "direction"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "scroll"
                  },
                  "amount": {
                    "type": "number",
                    "default": 0.6,
                    "maximum": 1,
                    "minimum": 0.1
                  },
                  "target": {
                    "anyOf": [
                      {
                        "type": "object",
                        "required": [
                          "x",
                          "y"
                        ],
                        "properties": {
                          "x": {
                            "type": "integer",
                            "maximum": 10000,
                            "minimum": 0
                          },
                          "y": {
                            "type": "integer",
                            "maximum": 10000,
                            "minimum": 0
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "ref",
                          "snapshot_id"
                        ],
                        "properties": {
                          "ref": {
                            "type": "integer",
                            "maximum": 1000,
                            "minimum": 1
                          },
                          "snapshot_id": {
                            "type": "string",
                            "pattern": "^snp_[a-z2-7]{12}$"
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "text"
                        ],
                        "properties": {
                          "nth": {
                            "type": "integer",
                            "maximum": 50,
                            "minimum": 1
                          },
                          "text": {
                            "type": "string",
                            "maxLength": 500,
                            "minLength": 1
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "id"
                        ],
                        "properties": {
                          "id": {
                            "type": "string",
                            "maxLength": 300,
                            "minLength": 1
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "desc"
                        ],
                        "properties": {
                          "desc": {
                            "type": "string",
                            "maxLength": 500,
                            "minLength": 1
                          }
                        },
                        "additionalProperties": false
                      }
                    ]
                  },
                  "direction": {
                    "enum": [
                      "up",
                      "down",
                      "left",
                      "right"
                    ],
                    "type": "string"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "text"
                ],
                "properties": {
                  "text": {
                    "type": "string",
                    "maxLength": 5000,
                    "minLength": 1
                  },
                  "type": {
                    "type": "string",
                    "const": "type"
                  },
                  "clear": {
                    "type": "boolean",
                    "default": false
                  },
                  "submit": {
                    "type": "boolean",
                    "default": false
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "key"
                ],
                "properties": {
                  "key": {
                    "anyOf": [
                      {
                        "enum": [
                          "enter",
                          "delete",
                          "tab",
                          "escape",
                          "space",
                          "up",
                          "down",
                          "left",
                          "right",
                          "page_up",
                          "page_down",
                          "move_home",
                          "move_end",
                          "menu",
                          "search",
                          "volume_up",
                          "volume_down"
                        ],
                        "type": "string"
                      },
                      {
                        "type": "integer",
                        "maximum": 400,
                        "minimum": 0
                      }
                    ]
                  },
                  "type": {
                    "type": "string",
                    "const": "key"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "back"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "home"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "recents"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "notifications"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "package"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "open_app"
                  },
                  "package": {
                    "type": "string",
                    "pattern": "^[A-Za-z][A-Za-z0-9_]*(\\.[A-Za-z0-9_]+)+$",
                    "maxLength": 255
                  },
                  "activity": {
                    "type": "string",
                    "maxLength": 300
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "package"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "const": "close_app"
                  },
                  "package": {
                    "type": "string",
                    "pattern": "^[A-Za-z][A-Za-z0-9_]*(\\.[A-Za-z0-9_]+)+$",
                    "maxLength": 255
                  },
                  "clear_data": {
                    "type": "boolean",
                    "default": false
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "url"
                ],
                "properties": {
                  "url": {
                    "type": "string",
                    "maxLength": 2000,
                    "minLength": 3
                  },
                  "type": {
                    "type": "string",
                    "const": "open_url"
                  },
                  "package": {
                    "type": "string",
                    "pattern": "^[A-Za-z][A-Za-z0-9_]*(\\.[A-Za-z0-9_]+)+$",
                    "maxLength": 255
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "ms"
                ],
                "properties": {
                  "ms": {
                    "type": "integer",
                    "maximum": 10000,
                    "minimum": 1
                  },
                  "type": {
                    "type": "string",
                    "const": "wait"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "object",
                "required": [
                  "type",
                  "target"
                ],
                "properties": {
                  "gone": {
                    "type": "boolean",
                    "default": false
                  },
                  "type": {
                    "type": "string",
                    "const": "wait_for"
                  },
                  "target": {
                    "anyOf": [
                      {
                        "type": "object",
                        "required": [
                          "text"
                        ],
                        "properties": {
                          "nth": {
                            "type": "integer",
                            "maximum": 50,
                            "minimum": 1
                          },
                          "text": {
                            "type": "string",
                            "maxLength": 500,
                            "minLength": 1
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "id"
                        ],
                        "properties": {
                          "id": {
                            "type": "string",
                            "maxLength": 300,
                            "minLength": 1
                          }
                        },
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "required": [
                          "desc"
                        ],
                        "properties": {
                          "desc": {
                            "type": "string",
                            "maxLength": 500,
                            "minLength": 1
                          }
                        },
                        "additionalProperties": false
                      }
                    ]
                  },
                  "timeout_ms": {
                    "type": "integer",
                    "default": 10000,
                    "maximum": 30000,
                    "minimum": 100
                  }
                },
                "additionalProperties": false
              }
            ]
          },
          "maxItems": 20,
          "minItems": 1,
          "description": "From 1 to 20 actions, run in order. Durations are in milliseconds, and the waits in one batch may add up to 60 seconds. Coordinates are device pixels."
        },
        "observe": {
          "enum": [
            "none",
            "ui",
            "screenshot",
            "both"
          ],
          "type": "string",
          "default": "ui",
          "description": "What the result shows of the screen afterwards: ui (the element list, the default), screenshot, both, or none. A batch that stops early shows the element list, unless the screen couldn't be read, or not in time."
        },
        "phone_id": {
          "type": "string",
          "pattern": "^ph_[a-z2-7]{12}$",
          "description": "Phone ID from create_phone or list_phones."
        }
      },
      "additionalProperties": false
    }
    arguments 823 lines
  • reboot_phone auth-required never probed

    Restart a phone that is stuck, keeping everything on it, and wait until it is ready again. A phone can reboot once every 10 minutes; a reboot the phone service didn't confirm is never sent twice: wait for ready with get_phone instead. If it is still creating or starting when this returns, call get_phone with its ID and wait "ready" to keep waiting: it only reads, while start_phone would renew the session.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "phone_id"
      ],
      "properties": {
        "phone_id": {
          "type": "string",
          "pattern": "^ph_[a-z2-7]{12}$",
          "description": "Phone ID from create_phone or list_phones."
        }
      },
      "additionalProperties": false
    }
    arguments 15 lines
  • install_app auth-required never probed

    Install an app from Phonebox's app library by package name, in the background. It doesn't reach Google Play: to get a Play Store app, open the Play Store app on the phone with act and install it there. To check on an install later, open the app with act: open_app answers app_not_found until the install has finished. With upload instead of package, it installs your own APK (see create_app_upload) and waits until the phone lists the app, or says why it failed. While that upload is still installing on the phone, and for 10 minutes after that install succeeds, calling install_app again with it starts nothing: a repeat only waits for it, or reports it.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "phone_id"
      ],
      "properties": {
        "upload": {
          "type": "string",
          "pattern": "^upl_[a-z2-7]{12}$",
          "description": "An upload of your own APK whose status is ready, from complete_app_upload. Give this or package."
        },
        "package": {
          "type": "string",
          "pattern": "^[A-Za-z][A-Za-z0-9_]*(\\.[A-Za-z0-9_]+)+$",
          "maxLength": 255,
          "description": "The app's Android package name, such as com.whatsapp: an app from Phonebox's app library. Give this or upload."
        },
        "replace": {
          "type": "boolean",
          "description": "With upload: uninstall the app first when it is on the phone, which deletes its data. Use it for a build signed with another key, or an older version_code."
        },
        "phone_id": {
          "type": "string",
          "pattern": "^ph_[a-z2-7]{12}$",
          "description": "Phone ID from create_phone or list_phones."
        }
      },
      "additionalProperties": false
    }
    arguments 30 lines
  • create_app_upload auth-required never probed

    Start an upload of your own APK, such as the debug build you just made, to install it on a phone. MCP can't carry a file, so this returns a one-off upload_url and the exact curl command to send the APK there from your shell; then call complete_app_upload with the storageId it answers. Send the URL one file of up to 500 MiB, within an hour.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {},
      "additionalProperties": false
    }
    arguments 6 lines
  • complete_app_upload auth-required never probed

    Finish an upload once its file has arrived, and wait while Phonebox reads and stores the APK. It answers with the upload: ready to install with install_app, or ended with an error saying why. If it is still processing when this returns, call it again with the same arguments: a repeat only waits.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "upload_id",
        "storage_id"
      ],
      "properties": {
        "upload_id": {
          "type": "string",
          "pattern": "^upl_[a-z2-7]{12}$",
          "description": "The upload's ID, from create_app_upload."
        },
        "storage_id": {
          "type": "string",
          "pattern": "^[\\w;:-]+$",
          "maxLength": 128,
          "minLength": 1,
          "description": "The storageId that upload_url answered with, as {\"storageId\": \"…\"}."
        }
      },
      "additionalProperties": false
    }
    arguments 23 lines
  • live_view_url auth-required never probed

    Create a link a human can open to watch and control the phone, for example to sign in or solve a check. The link expires (default one hour). Anyone with the link controls the phone until it expires; share it only with your user and never paste it into logs or shared chats.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "phone_id"
      ],
      "properties": {
        "phone_id": {
          "type": "string",
          "pattern": "^ph_[a-z2-7]{12}$",
          "description": "Phone ID from create_phone or list_phones."
        },
        "expires_in": {
          "type": "integer",
          "default": 3600,
          "maximum": 86400,
          "minimum": 60,
          "description": "Seconds until the link stops working, from 60 to 86400. The default is 3600."
        }
      },
      "additionalProperties": false
    }
    arguments 22 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 13d21d4d3018ced1.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/13d21d4d3018ced1/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/13d21d4d3018ced1/badge.svg)](https://brick.blue/agent/13d21d4d3018ced1?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.