@betadrop/mcp

MCP serverAI & models

Publish iOS and Android builds to testers and manage share links from an AI coding agent.

Unavailable. This server has no hosted endpoint yet, so ahel can't serve it.

Connect ahel once, and every AI you use reads what you have installed.

From the project's README

As published by betadrop-app/betadrop-mcp in README.md.

"Publish this build and send me the install link." Say that to your AI assistant and a tester can be installing the app thirty seconds later.

BetaDrop puts an iOS .ipa or Android .apk behind an over-the-air install link: testers open the link on their phone and install straight from the browser — no TestFlight review wait, no Play track, no tester accounts. If you have used Diawi or Firebase App Distribution, it does the same job.

BetaDrop MCP moves that step to the other side of your AI assistant. Claude, Cursor, Copilot, Windsurf, Zed and Antigravity can publish builds, look up release history and manage API tokens through ordinary prompts — no browser tab, no CLI, no leaving the editor.

claude mcp add betadrop -s user -- npx -y @betadrop/mcp

11 tools. One npx command. No build step. Your assistant already knows how to use them — you never type a tool name.


⚡ Quick Start (3 Steps)

Step 1 — Get a BetaDrop API Token

  1. Sign up or log in at betadrop.app
  2. Go to Settings → Developer
  3. Under API tokens, click Create token, give it a name (e.g. "My IDE"), and copy the token
    (It starts with bd_live_... — save it somewhere safe, it's shown only once!)

Step 2 — Add the MCP Server to Your Editor

[!TIP] 🤖 AI-Native Installation (Easiest) Since you are already using an AI assistant (like Cursor Composer, Claude, Copilot, or Antigravity), you don't need to edit configuration files manually! Just paste one of the following prompts directly into your AI chat:

  • Cursor: "Add the @betadrop/mcp server to my global Cursor mcp.json config"
  • Antigravity: "Add the @betadrop/mcp server to my Antigravity mcp_config.json"
  • VS Code (Copilot): "Add the @betadrop/mcp server to my workspace .vscode/mcp.json"
  • Claude Desktop: "Add the @betadrop/mcp server to my Claude Desktop config"

The AI will automatically locate, create, or update the configuration file for you. Once it is done, simply refresh/restart your editor.

Otherwise, pick your editor below to configure it manually.

Run one command in your terminal:

claude mcp add betadrop -s user -- npx -y @betadrop/mcp

This installs BetaDrop globally across all your Claude Code projects.
For a single project only, drop the -s user flag.

Verify it worked:

claude mcp list

Start a new Claude Code session and type /mcp to confirm the connection.

Open your config file:

OSPath
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json

Add this inside the file:

{
  "mcpServers": {
    "betadrop": {
      "command": "npx",
      "args": ["-y", "@betadrop/mcp"]
    }
  }
}

Restart Claude Desktop. BetaDrop tools will appear in the 🔧 tools panel.

Create .cursor/mcp.json in your project root:

{
  "mcpServers": {
    "betadrop": {
      "command": "npx",
      "args": ["-y", "@betadrop/mcp"]
    }
  }
}

Or for global access, create/edit ~/.cursor/mcp.json with the same content.

Go to Settings → MCP and click Refresh to pick up the new server.

Create .vscode/mcp.json in your project root:

{
  "servers": {
    "betadrop": {
      "command": "npx",
      "args": ["-y", "@betadrop/mcp"]
    }
  }
}

Or add it globally:

OSPath
macOS~/Library/Application Support/Code/User/mcp.json
Windows%APPDATA%\Code\User\mcp.json
Linux~/.config/Code/User/mcp.json

Use Copilot in Agent mode to access BetaDrop tools.

Edit ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "betadrop": {
      "command": "npx",
      "args": ["-y", "@betadrop/mcp"]
    }
  }
}

Add to your Zed settings file:

OSPath
macOS~/Library/Application Support/Zed/settings.json
Linux~/.config/zed/settings.json
{
  "context_servers": {
    "betadrop": {
      "command": {
        "path": "npx",
        "args": ["-y", "@betadrop/mcp"]
      }
    }
  }
}

Open MCP settings from Settings → MCP Servers or edit the config file directly:

OSPath
macOS~/.gemini/antigravity-ide/mcp_config.json
Windows%USERPROFILE%\.gemini\antigravity-ide\mcp_config.json
{
  "mcpServers": {
    "betadrop": {
      "command": "npx",
      "args": ["-y", "@betadrop/mcp"]
    }
  }
}

Restart Antigravity to pick up the new server.

Step 3 — First-Time Setup

After adding the MCP server, authenticate with your BetaDrop API token. Open your AI assistant and type:

"Log me in to BetaDrop with token bd_live_xxxxxxxx"

Your credentials are saved to $XDG_CONFIG_HOME/betadrop/config.json when that variable is set, otherwise ~/.betadrop/config.json, with 0600 permissions (owner-read only). On logout, the token is revoked on the server and the config file is removed.

You're all set! Now try any of these prompts 👇


🚀 Try These Prompts

You don't need to memorize any tool names — just talk to your AI assistant naturally:

📦 Publishing Builds
PromptWhat Happens
"Publish ./build/MyApp.ipa to BetaDrop"Uploads the IPA and returns an install link
"Upload MyApp.apk with notes 'Fixed login crash on Android 14'"Publishes with release notes visible to testers
"Push the latest IPA to BetaDrop, expire after 7 days"Sets a time-based expiry on the build
"Upload MyApp.ipa and send me the install link"Returns a shareable OTA install URL
📋 Build History
PromptWhat Happens
"Show my recent BetaDrop builds"Lists your latest builds across both platforms
"List my iOS builds"Filters to iOS only
"Show all expired builds on BetaDrop"Lists builds that have hit their expiry limit
"Any expired Android builds?"Expired builds filtered by platform
"Get the install link for my last build"Retrieves the shareable URL
🔑 Token Management
PromptWhat Happens
"Show my BetaDrop API tokens"Lists all active tokens with abilities and expiry
"Create a BetaDrop token for CI called 'GitHub Actions'"Creates a new token scoped for CI
"Make a read-only token called 'QA Team'"Creates a token whose abilities are recorded as read only
"Create a token that expires in 30 days"Auto-expiring token for temporary access
"Revoke BetaDrop token abc-123"Permanently revokes a token
👤 Account
PromptWhat Happens
"Am I logged in to BetaDrop?"Shows your email, token details, and API URL
"Log out of BetaDrop"Revokes the token server-side and clears local config
🔁 Chained, in one turn

Because these are tools and not a chat bot, your assistant can string them together:

"Build the release APK, publish it to BetaDrop with the last commit message as the notes, and give me the install link."

The build runs in your terminal, betadrop_publish uploads the artifact, and the link comes back in the same reply.


📖 All Available Tools

Eleven tools across four areas. You never call these by name — the assistant picks them.

Authentication

ToolWhat It Does
betadrop_loginSave and validate your API token
betadrop_logoutRevoke the token on the server and clear local credentials
betadrop_whoamiShow your account email, token name, and expiry

Publishing Builds

ToolWhat It Does
betadrop_publishUpload an .ipa or .apk and get a shareable install link
betadrop_upload_statusGet the result (install link) of the most recent betadrop_publish upload. Takes no parameters — called automatically when a large build outruns the 90-second publish window

betadrop_publish parameters:

ParameterTypeRequiredDescription
filePathstringAbsolute path to the .ipa or .apk file
namestringOverride the app display name
versionstringOverride the version string (e.g. 1.2.3)
buildNumberstringOverride the build number
bundleIdstringOverride the bundle / package ID
notesstringRelease notes shown on the install page
expiryTypestringnone · time · downloads · devices · combined. none (a permanent link) requires a paid plan — see below
expiryTimeDaysnumberExpire after N days (use with time or combined). Clamped to your plan's maximum build retention
expiryDownloadLimitnumberExpire after N downloads (use with downloads or combined)
expiryDeviceLimitnumberExpire after N unique devices (use with devices or combined)

Expiry is capped by your plan. none — a permanent link — is a paid-plan feature; on a plan without it the build is stored as a dated one instead of being rejected. expiryTimeDays is clamped to your plan's maximum build retention on every plan. When either happens the server returns a retentionClamp object (requestedDays, appliedDays, maxDays, permanentDenied, message) and the tool result appends a ⚠️ line explaining what was applied. Note it is reported only when the plan actually shortened something you asked for: send no expiryTimeDays and it stays null even if your account default was clamped down. Current per-plan day ceilings live in src/lib/limits.json rather than being restated here.

How uploads work: The file is validated locally (ZIP magic bytes check) and uploaded, with progress notifications streamed to your AI client in 5% increments. The install link comes back in the tool result. Builds that take longer than 90 seconds keep uploading in the background so the tool call does not time out — the assistant then calls betadrop_upload_status to fetch the link. A status file at ~/.betadrop/upload_status.json tracks the upload in real time.


Build History

ToolWhat It Does
betadrop_list_buildsList recent builds, with optional filters
betadrop_list_expired_buildsList only expired builds (convenience shortcut)

betadrop_list_builds parameters:

ParameterTypeRequiredDescription
platformstringios or android — omit to list all
statusstringactive · expired · disabled · deprecated · latest
pagenumberPage number (default: 1)
perPagenumberResults per page (default: 20, max: 100)

betadrop_list_expired_builds parameters:

ParameterTypeRequiredDescription
platformstringios or android — omit to list all
pagenumberPage number (default: 1)
perPagenumberResults per page (default: 20, max: 100)

Each result includes the build name, version, platform, file size, status, dates, and a shareable install link.


Token Management

ToolWhat It Does
betadrop_token_listList all your active (non-revoked) API tokens
betadrop_token_createCreate a new scoped token (plaintext shown only once!)
betadrop_token_deletePermanently revoke a token by ID

betadrop_token_create parameters:

ParameterTypeRequiredDescription
namestringLabel for the token (max 100 chars)
abilitiesstring[]["publish"], ["read"], or ["*"] (default: all)
expiresInDaysnumberToken lifetime in days (1–365). Omit for no expiry

Abilities are recorded on the token and shown by betadrop_token_list; publishing builds requires the publish ability. Do not treat a read token as a hard security boundary across every endpoint — scope it to a plan, and revoke tokens you no longer hand out.

⚠️ The plaintext token is shown exactly once at creation. Copy it immediately!


Quick Help

ToolWhat It Does
betadrop_helpShow a full offline reference of all tools and example prompts

⚙️ Configuration

Set these environment variables to override the defaults:

VariableDefaultDescription
BETADROP_API_URLhttps://api.betadrop.appAPI server URL (for self-hosted)
BETADROP_APP_URLhttps://betadrop.appFrontend URL for install links
BETADROP_TOKEN(none)Token for CI — skips the local config file

To set them for the MCP server, add an env block alongside command and args in the editor config from Step 2:

{
  "mcpServers": {
    "betadrop": {
      "command": "npx",
      "args": ["-y", "@betadrop/mcp"],
      "env": { "BETADROP_TOKEN": "bd_live_xxx" }
    }
  }
}

With BETADROP_TOKEN set there is no need to log in — the server uses it directly:

BETADROP_TOKEN=bd_live_xxx betadrop-mcp

❓ Troubleshooting

"Tool not found" or no BetaDrop tools showing up?

  • Make sure Node.js 18+ is installed: node --version
  • Restart your editor after adding the MCP config
  • In Claude Code, run /mcp to check the server status
  • In Cursor, go to Settings → MCP and click Refresh

"You are not logged in"?

  • Ask your AI: "Log me in to BetaDrop with token bd_live_..."
  • Or set the BETADROP_TOKEN env variable in your MCP config — see Configuration

Upload seems stuck?

  • Builds that take longer than 90 seconds keep uploading in the background so the tool call does not time out
  • Ask your assistant to check the upload status (it will call betadrop_upload_status) — that returns the install link once the upload lands
  • You can also watch ~/.betadrop/upload_status.json directly

Token expired or revoked?

The iOS build downloads on the phone but will not open?

  • An ad-hoc .ipa only installs on devices that were in the provisioning profile when it was signed — publishing it does not change that. Send the tester the UDID checker, add the device in the Apple Developer portal, and re-sign.

Also from BetaDrop

The same publish step, on the other two surfaces — one account, one set of API tokens:

@betadrop/clisourcebetadrop publish app.ipa from your terminal. Prints the install link and a scannable QR code.
betadrop-app/upload-actionPublish from a GitHub Actions workflow. The install link lands on the run summary and, optionally, in a pull-request comment that updates itself on every push.

📚 Links

Requirements

  • Node.js 18+
  • A BetaDrop account — the free tier needs no card. Retention and file-size ceilings by plan are on the pricing page.
  • One of the supported AI editors (Claude, Cursor, VS Code, Windsurf, Zed, Antigravity)

Contributing

Issues and pull requests: https://github.com/betadrop-app/betadrop-mcp. If this saved you a trip to the browser, a ⭐ helps other mobile teams find it.

License

MIT

Signals

Last commit
Sep 2026
Weekly downloads
203
Advanced
Delivery
betadrop-mcp MCP server → your ahel gateway (mcp.ahel.ai) → every connected AI client.
Catalog kind
mcp-server
Gateway key
io-github-betadrop-app-betadrop-mcp
Source
github.com/betadrop-app/betadrop-mcp