TapTry

io.github.Romildoescoding由 GitHub 帳號 Romildoescoding 發布v1.1.0更新於 Nov 3, 2026

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

概覽

AI 產生的概覽

把 Android 應用程式安裝檔上傳到 TapTry 產生可在瀏覽器中執行的連結,並讓助理在雲端 Android 裝置上操作應用程式進行測試。

可以做什麼
  • 上傳、列出、查詢狀態與刪除 Android 應用程式檔案(.apk、.aab、.apks、.xapk、.apkm),並取得可分享的連結
  • 為已上傳的應用程式啟動雲端 Android 裝置工作階段,並在結束時釋放裝置
  • 透過截圖或更省成本的介面元素清單(含座標)檢視裝置畫面
  • 依文字標籤或座標點擊、滑動、輸入文字、按鍵來操作應用程式
  • 讀取應用程式日誌,包括是否仍在執行以及最近一次當機的堆疊資訊
適用情境
適合開發 Android 應用程式時,讓助理發布可執行的預覽連結,或在真實雲端裝置上對建置版本做端對端快速驗證(開啟應用程式、用測試帳號註冊、回報當機),不必使用本機模擬器。
執行需求
透過 npx 以 stdio 在本機執行,需要 Node 20 以上。需要 TapTry API 金鑰,透過環境變數 TAPTRY_API_KEY 傳入,或以命令列登入指令儲存。需要連線至 TapTry API 的網路。裝置工作階段會消耗帳戶的執行次數,最多同時 2 個,閒置 5 分鐘會自動結束。
安裝前請注意
上傳會以使用者名義發布應用程式,預設為公開,除非設為未列出或私有;上傳前應先取得使用者同意。上傳的檔案會傳送給 TapTry 並由 VirusTotal 掃描,刪除前會一直保留。delete_app 無法復原,需傳入 confirm: true。裝置工作階段會把點擊、滑動、按鍵與輸入文字傳送給應用程式,截圖與日誌可能包含應用程式顯示或記錄的任何內容。API 金鑰屬於憑證。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 TapTry,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

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

來源:README.md,提交 108f7c5

工具

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.

輸入參數refnamefile_path必填visibilitywait_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.

輸入參數appref

list_apps

List TapTry apps

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

輸入參數ref

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).

輸入參數appref

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.

輸入參數session_id必填

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.

輸入參數session_id必填

tap

Tap

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

輸入參數xytextsession_id必填

swipe

Swipe

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

輸入參數x1必填x2必填y1必填y2必填session_id必填duration_ms

type_text

Type text

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

輸入參數text必填session_id必填

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.)

輸入參數key必填session_id必填

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.

輸入參數session_id必填

end_session

End the session

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

輸入參數session_id必填

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.

輸入參數apprefconfirm必填

版本歷史

1
  1. v1.1.0最新Nov 1, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分