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 分