TapTry

io.github.RomildoescodingPublished by GitHub account Romildoescodingv1.1.0Updated Nov 3, 2026

Upload Android apps for a link anyone can run in a browser, and test them on a cloud Android device.

VerifiedSTDIODesktop onlyCloud & InfrastructureDeveloper Tools

Overview

AI-generated overview

Uploads Android app builds to TapTry for a browser-playable link, and lets an assistant drive the app on a cloud Android device to test it.

What you can do
  • Upload, list, check status of and delete Android app files (.apk, .aab, .apks, .xapk, .apkm) and get shareable links
  • Start a cloud Android device session for an uploaded app and end it when done
  • Inspect the device screen via screenshots or a cheaper UI element dump with coordinates
  • Interact with the app by tapping by label or position, swiping, typing text and pressing keys
  • Read app logs, including whether it is still running and the last crash with stack trace
When to use it
Useful when you build Android apps and want an assistant to publish a runnable preview link, or to smoke-test a build end to end on a real cloud device (open it, sign up with a test account, report crashes) without a local emulator.
Requirements
Runs locally over stdio via npx (Node 20+). Needs a TapTry API key, passed as the TAPTRY_API_KEY environment variable or saved with the CLI login command. Network access to the TapTry API. Device sessions consume the account's runs, with at most 2 concurrent and a 5-minute idle timeout.
Before you install
Uploads publish the app under the user's name and are public by default unless made unlisted or private; ask before uploading. Uploaded files are sent to TapTry and scanned by VirusTotal, and are kept until deleted. delete_app is irreversible and requires confirm: true. Device sessions send taps, swipes, keys and typed text to the app, and screenshots and logs may contain whatever the app displays or logs. The API key is a credential.

Installation

In SourceWeft

  1. Open TapTry in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

taptry

Turn an Android build into a link anyone can run in their browser - no install, no sideloading. From your terminal, from CI on every pull request, or from your coding assistant.

bash
npx taptry upload app/build/outputs/apk/release/app-release.apk# Uploading app-release.apk (18.2 MB)…# Created My Game - https://taptry.in/app/my-game# Waiting for the malware scan and checks (this can take a few minutes)…#   Checking for malware…#   Ready# https://taptry.in/app/my-game

Takes .apk, .aab, .apks, .xapk and .apkm, up to 500MB. Every upload is malware-scanned before its link works. Needs Node 20+; no dependencies.

Setup

  1. In TapTry, open Settings > API keys and create a key.
  2. Either save it on your machine - npx taptry login - or set TAPTRY_API_KEY (what CI should do).

CLI

taptry upload <file> [--name <name>] [--ref <ref>] [--unlisted | --private] [--no-wait] [--timeout <s>] [--json]taptry status <app> | --ref <ref>taptry list [--ref <ref>]taptry delete <app> | --ref <ref> [--yes]taptry login | logout | whoamitaptry mcp
  • --ref is your own id for an app, e.g. github:me/game#42. Uploading again with the same ref replaces that app's file and keeps its link - use it for anything you upload repeatedly.
  • Visibility: public by default (on your TapTry profile, anyone can run it). --unlisted: listed nowhere, and the link printed is a secret link only the people you send it to can open. --private: only you.
  • upload waits for the checks by default and prints the link on stdout, so URL=$(taptry upload app.apk) works. --json prints the whole result.
  • delete asks first; without a terminal it needs --yes.

Exit codes: 0 ok · 1 error (network, auth, refused request) · 2 bad usage · 3 the app failed its checks (malware, not an app, …) · 4 timed out waiting for the checks.

GitHub Action: a preview link on every pull request

Each pull request gets one TapTry app and one comment with its link, updated on every push and deleted when the PR closes. Previews are unlisted by default: anyone with the link in the PR can run them, and they never show up on your TapTry profile.

yaml
# .github/workflows/taptry-preview.ymlname: TapTry previewon:  pull_request:    types: [opened, synchronize, reopened, closed]
permissions:  contents: read  pull-requests: write
jobs:  preview:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v4        if: github.event.action != 'closed'      - uses: actions/setup-java@v4        if: github.event.action != 'closed'        with:          distribution: temurin          java-version: 17      - name: Build        if: github.event.action != 'closed'        run: ./gradlew assembleDebug      - uses: Romildoescoding/taptry-cli@v1        with:          api-key: ${{ secrets.TAPTRY_API_KEY }}          file: app/build/outputs/apk/debug/app-debug.apk

Add your key as the repository secret TAPTRY_API_KEY. Pull requests from forks don't get secrets, so their previews are skipped with a warning.

InputDefault
api-key-Required.
file-The build output. A glob is fine if it matches exactly one file.
namefrom the fileApp name, set on the first upload.
refgithub:<repo>#<PR> or github:<repo>@<branch>Same ref, same app.
visibilityunlistedunlisted (anyone with the link, listed nowhere), public or private.
wait / timeouttrue / 900Wait for the checks.
commenttrueKeep one PR comment up to date.
delete-on-closetrueDelete the preview when the PR closes.
fail-on-errortrueFail the step when the build is refused.

Outputs: url, app-id, slug, status, ready.

Outside pull requests (e.g. on: push to main), it keeps one app per branch: github:<repo>@main.

MCP server: "build it and give me a link"

taptry mcp is a Model Context Protocol server for Claude Code, Cursor, Claude Desktop and other MCP clients. Tools: upload_app, get_status, get_link, list_apps, delete_app. The assistant is told to ask before uploading or deleting, and delete_app refuses unless confirm: true is passed.

Claude Code

bash
claude mcp add taptry -e TAPTRY_API_KEY=tt_your_key -- npx -y taptry mcp

Cursor (~/.cursor/mcp.json) or Claude Desktop (claude_desktop_config.json):

json
{  "mcpServers": {    "taptry": {      "command": "npx",      "args": ["-y", "taptry", "mcp"],      "env": { "TAPTRY_API_KEY": "tt_your_key" }    }  }}

After taptry login you can leave out the env block.

Claude Code plugin - the MCP server and the TapTry skill in one install (set TAPTRY_API_KEY in your environment first):

/plugin marketplace add Romildoescoding/taptry-cli/plugin install taptry@taptry

Let your assistant test the app on a real device

The MCP server can also run your uploaded app on a cloud Android device and let the assistant use it: start_session, then screenshot (it sees the screen) and get_ui (the elements, with coordinates), tap (by label or position), type_text, press_key, swipe, get_logs (crashes and recent log lines) and end_session. So "upload the build, open it, sign up with a test account and tell me if anything crashes" works end to end. Each session uses one of your runs and ends after 5 minutes without a call; at most 2 run at once.

Data and privacy

Everything here talks to one service: the TapTry API at https://api.taptry.in, using your API key.

  • Sent to TapTry: app files you upload (.apk, .aab, .apks, .xapk, .apkm), the app name and settings you give, and - in device sessions - the taps, swipes, keys and text you send to your app.
  • Read from TapTry: your account name and plan (whoami), your apps and their status, and in device sessions the screenshots, on-screen elements and logs of your own app. Screenshots and logs can contain whatever your app displays or logs.
  • Kept by TapTry: uploaded apps until you delete them (taptry delete, or in the web app); run counts and analytics for your apps. Device-session screenshots, UI reads and logs are returned to you and not stored. Uploaded files are malware-scanned by VirusTotal. Privacy policy · Terms.
  • Stored locally: taptry login saves your API key in your user config folder (mode 0600). Nothing else is written.

API

Everything here wraps TapTry's public HTTP API at https://api.taptry.in/api/v1 (bearer-token auth with the same key). A full reference for using it directly is coming to TapTry's docs.

License

MIT

Source: README.md at commit 108f7c5

Tools

14

upload_app

Upload an app to TapTry

Upload an Android app file (.apk, .aab, .apks, .xapk or .apkm) from disk to the user's TapTry account and get a link anyone can open to run the app in their browser. This publishes the app under the user's name: ask the user before uploading, and say whether it will be public (shown on their profile, anyone can run it), unlisted (listed nowhere, anyone with its secret link can run it) or private (only them). Uploading again with the same `ref` replaces that app's file and keeps its link - prefer that over creating duplicates. Every upload is malware-scanned first; the link only works once status is CLEAN, which can take a few minutes.

Parametersrefnamefile_pathrequiredvisibilitywait_seconds

get_status

Check a TapTry app

Check whether an uploaded app has finished its malware scan and is ready to run, and get its link.

Parametersappref

list_apps

List TapTry apps

List the apps in the user's TapTry account, newest first.

Parametersref

start_session

Run an app on a cloud Android device

Start one of the user's uploaded TapTry apps on a real cloud Android device so you can test it: look at the screen (screenshot, get_ui), act on it (tap, swipe, type_text, press_key) and read its logs (get_logs). Uses one of the user's runs. Returns a session_id for the other session tools. The session ends after 5 minutes without a call - call end_session when you're done. The app must have status CLEAN (check with get_status after upload_app).

Parametersappref

screenshot

Screenshot the device

See the device screen. Coordinates for tap/swipe are in device pixels (the size is in start_session's result) - prefer tap with text when the target has a label.

Parameterssession_idrequired

get_ui

Read the screen's elements

The elements on screen - text, content descriptions, ids, whether they're clickable - with their bounds and centre points in device pixels. Cheaper than a screenshot for finding what to tap.

Parameterssession_idrequired

tap

Tap

Tap the element showing `text` (its text, content description or id), or the point x, y in device pixels.

Parametersxytextsession_idrequired

swipe

Swipe

Swipe from x1,y1 to x2,y2 (device pixels) - to scroll, swipe up from the bottom half.

Parametersx1requiredx2requiredy1requiredy2requiredsession_idrequiredduration_ms

type_text

Type text

Type into the focused field (tap it first). Plain ASCII; press_key enter for a newline.

Parameterstextrequiredsession_idrequired

press_key

Press a key

Press back, enter, delete, tab, escape, space, up, down, left, right, menu, search, volume_up or volume_down. (Home and recents are disabled - the app runs sandboxed.)

Parameterskeyrequiredsession_idrequired

get_logs

Read the app's logs

Whether the app is still running, its last crash (with stack trace) if any, and its recent log lines.

Parameterssession_idrequired

end_session

End the session

Release the device. Call this when you're done testing.

Parameterssession_idrequired

delete_app

Delete a TapTry app

Permanently delete one of the user's TapTry apps - its link, likes and stats. Irreversible: only call this after the user has explicitly agreed to delete that specific app, and pass confirm: true.

Parametersapprefconfirmrequired

Version history

1
  1. v1.1.0LatestNov 1, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts