Skip to main content
Glama

@betadrop/mcp

npm version MCP Registry Node License: MIT

"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:

OS

Path

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:

OS

Path

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:

OS

Path

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:

OS

Path

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 👇


Related MCP server: TestFlight Feedback MCP Server

🚀 Try These Prompts

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

📦 Publishing Builds

Prompt

What 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

Prompt

What 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

Prompt

What 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

Prompt

What 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

Tool

What It Does

betadrop_login

Save and validate your API token

betadrop_logout

Revoke the token on the server and clear local credentials

betadrop_whoami

Show your account email, token name, and expiry


Publishing Builds

Tool

What It Does

betadrop_publish

Upload an .ipa or .apk and get a shareable install link

betadrop_upload_status

Get 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:

Parameter

Type

Required

Description

filePath

string

Absolute path to the .ipa or .apk file

name

string

Override the app display name

version

string

Override the version string (e.g. 1.2.3)

buildNumber

string

Override the build number

bundleId

string

Override the bundle / package ID

notes

string

Release notes shown on the install page

expiryType

string

none · time · downloads · devices · combined. none (a permanent link) requires a paid plan — see below

expiryTimeDays

number

Expire after N days (use with time or combined). Clamped to your plan's maximum build retention

expiryDownloadLimit

number

Expire after N downloads (use with downloads or combined)

expiryDeviceLimit

number

Expire 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

Tool

What It Does

betadrop_list_builds

List recent builds, with optional filters

betadrop_list_expired_builds

List only expired builds (convenience shortcut)

betadrop_list_builds parameters:

Parameter

Type

Required

Description

platform

string

ios or android — omit to list all

status

string

active · expired · disabled · deprecated · latest

page

number

Page number (default: 1)

perPage

number

Results per page (default: 20, max: 100)

betadrop_list_expired_builds parameters:

Parameter

Type

Required

Description

platform

string

ios or android — omit to list all

page

number

Page number (default: 1)

perPage

number

Results 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

Tool

What It Does

betadrop_token_list

List all your active (non-revoked) API tokens

betadrop_token_create

Create a new scoped token (plaintext shown only once!)

betadrop_token_delete

Permanently revoke a token by ID

betadrop_token_create parameters:

Parameter

Type

Required

Description

name

string

Label for the token (max 100 chars)

abilities

string[]

["publish"], ["read"], or ["*"] (default: all)

expiresInDays

number

Token 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

Tool

What It Does

betadrop_help

Show a full offline reference of all tools and example prompts


⚙️ Configuration

Set these environment variables to override the defaults:

Variable

Default

Description

BETADROP_API_URL

https://api.betadrop.app

API server URL (for self-hosted)

BETADROP_APP_URL

https://betadrop.app

Frontend 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/clisource

betadrop publish app.ipa from your terminal. Prints the install link and a scannable QR code.

betadrop-app/upload-action

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


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

Available Tools

11 tools
betadrop_helpA

Get a quick reference of all available BetaDrop MCP tools, their inputs, and example prompts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It conveys that this is a read-only reference operation with no side effects and hints at the response content (tools, inputs, example prompts). It does not disclose whether authentication is required or the exact output format, but the non-mutating nature is reasonably clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence of 17 words with zero waste. 'Get a quick reference' opens with the action, and every phrase ('all available', 'their inputs', 'example prompts') adds distinct value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 0-parameter help tool with no output schema, the description is nearly complete: it states the purpose and what the agent will receive. The only minor gap is the lack of explicit guidance on whether login is a prerequisite, which could matter given the authentication-focused siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4 per the rubric. The description correctly implies no inputs are needed, and there is nothing about parameters that needs further explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get a quick reference') with a clear resource (all BetaDrop MCP tools) and specifies what it returns (inputs and example prompts). It distinguishes itself from all functional siblings like betadrop_publish or betadrop_token_create by being the meta-level orientation tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implied: an agent would call this when it needs an overview of available tools, inputs, or example prompts. However, there is no explicit statement of when to use it versus alternatives, no exclusions, and no mention of whether it works without authentication despite the existence of betadrop_login.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

betadrop_list_buildsB

List recent builds published to BetaDrop, optionally filtered by platform and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1).
statusNoFilter by status. Omit to list all.
perPageNoResults per page (default 20, max 100).
platformNoFilter by platform. Omit to list all.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read-only operation by saying 'List', and 'recent' suggests temporal ordering, but it does not disclose pagination behavior, authentication requirements, sorting details, or whether all statuses are included by default.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the main action and then states the optional filters. Every phrase earns its place, and there is no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple listing tool with fully documented parameters, the description is mostly adequate. However, with no output schema and no annotations, it does not mention return format, default sort order, or the relationship to betadrop_list_expired_builds, leaving some ambiguity for an agent selecting between siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all four parameters with descriptions and enums, so the description adds little semantic value. The mention of filtering by platform and status matches the schema but does not go beyond it; baseline 3 applies because schema coverage is 100%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: list builds on BetaDrop, with optional filtering by platform and status. It is clear about what the tool does and its scope, though it does not explicitly distinguish itself from the sibling betadrop_list_expired_builds, which overlaps because 'expired' is a status filter value.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives such as betadrop_list_expired_builds. The phrase 'optionally filtered by platform and status' hints at usage scenarios but does not state exclusions or point to a more specialized sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

betadrop_list_expired_buildsA

List all expired builds on BetaDrop. Shortcut for listing builds with status 'expired'. Shows expiry reason and details.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1).
perPageNoResults per page (default 20, max 100).
platformNoFilter by platform. Omit to list all.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does say 'Shows expiry reason and details,' which reveals part of the output behavior. However, it omits any mention of authentication needs, read-only guarantees, or a more precise return shape, leaving the agent with some uncertainty for a tool that has no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with three short sentences, each adding information: the action, the shortcut relationship, and the output details. The only minor issue is that the first sentence nearly restates the tool name, making it somewhat redundant, but overall it is well-structured and easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is no output schema, the description partially compensates by mentioning 'expiry reason and details,' but it does not define the response structure beyond vague 'details.' The schema covers pagination and platform filtering, and the tool is a simple list, so the description is adequate but not rich enough to be fully complete without an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all three parameters (page, perPage, platform) with complete descriptions, achieving 100% coverage. The tool description adds no extra meaning beyond what the schema provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List all expired builds on BetaDrop.' It also clarifies the relationship to the general listing tool by calling it a 'shortcut for listing builds with status 'expired'', which distinguishes it from siblings like betadrop_list_builds. The mention of 'Shows expiry reason and details' provides additional clarity about the output focus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: this is a shortcut for a specific status filter, so an agent can infer it should be used when expired builds are needed. However, it does not explicitly name the alternative (betadrop_list_builds) or state when not to use this tool, stopping short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

betadrop_loginA

Configure API authentication with a BetaDrop token. Validates the token against the server and saves credentials to the shared CLI config.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesBetaDrop API token (e.g. bd_live_...)
apiUrlNoOptional BetaDrop API base URL override.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and discloses two behavioral facts: it validates the token against the server (network call) and persists credentials to shared CLI config (side effect). It doesn't discuss overwriting existing credentials, but it is sufficient for safety awareness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the core purpose; no filler or repetition of schema/field names.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter tool with no annotations, it covers what the tool does, validation, and persistence. With no output schema, it doesn't state return/success behavior, but this is a minor gap for a login operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters, including token example and apiUrl as optional override. The description adds only that the token is validated, not deeper syntax or behavior, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('Configure API authentication') and resource ('BetaDrop token'), then adds validation and credential persistence, which separates it from sibling token-management or status tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: call this when setting up/updating CLI authentication with a BetaDrop token. It does not mention alternatives or exclusions, but its purpose and sibling set make selection unmissable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

betadrop_logoutA

Revoke the active token on the server and clear local credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of disclosing side effects. It explicitly states that the active token is revoked on the server and local credentials are cleared, which are the key behavioral consequences. It does not cover idempotency or error cases, but the main destructive actions are transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler. It front-loads the primary server-side action and then states the local cleanup, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless logout tool with no output schema, the description is largely complete: it names the operation and its side effects. It omits edge-case behavior such as calling logout when no active token exists, but this is minor for such a simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there are no parameter semantics for the description to clarify. The baseline of 4 applies because the empty schema fully defines the input surface.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Revoke') and identifies both the server-side token and local credentials, so the action is clear. It does not explicitly name or contrast sibling tools like betadrop_token_delete, but the focus on the 'active token' and local state provides some differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus betadrop_login or betadrop_token_delete, and no mention of prerequisites or expected conditions. The intended use is inferable from the name and effects, but the description does not state it directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

betadrop_publishB

Publish an iOS (.ipa) or Android (.apk) build to BetaDrop.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOverride the app display name.
notesNoRelease notes shown on the install page.
versionNoOverride the version string (e.g. 1.2.3).
bundleIdNoOverride the bundle / package ID.
filePathYesAbsolute path to the build file (.ipa or .apk).
expiryTypeNoExpiry strategy for this build.
buildNumberNoOverride the build number.
expiryTimeDaysNoExpire after N days (requires expiryType 'time' or 'combined').
expiryDeviceLimitNoExpire after N unique devices (requires expiryType 'devices' or 'combined').
expiryDownloadLimitNoExpire after N downloads (requires expiryType 'downloads' or 'combined').

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the high-level 'publish' action without describing side effects, authentication needs, whether existing builds are replaced, or what the response looks like. This is similar to the 'update_drive' calibration example.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the action verb and resource, and contains no filler. It is as concise as possible while conveying the core operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 10 parameters, no annotations, and no output schema, the description is too sparse. It does not explain the workflow around publishing, including authentication, upload progress, return values, or how this step fits with sibling tools like betadrop_upload_status. The schema handles parameters but not operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: every parameter, including the expiryType enum and conditional expiry limit fields, already has a descriptive schema entry. The tool description adds nothing beyond restating the .ipa/.apk types that filePath already documents, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('publish') with a clear resource ('an iOS (.ipa) or Android (.apk) build') and target platform ('to BetaDrop'). This makes the tool's action distinct from siblings like list_builds, token management, or upload_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool vs alternatives, no mention of prerequisites like being logged in, and no indication of how this relates to betadrop_upload_status or betadrop_list_builds. Intended usage is only implied by the name and basic sentence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

betadrop_token_createA

Create a new CLI token. The plaintext token is shown exactly once — copy it immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable label for the token (max 100 chars).
abilitiesNoPermissions granted to the token. Defaults to ['*'] (all).
expiresInDaysNoToken lifetime in days (1–365). Omit for no expiry.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It effectively warns that 'the plaintext token is shown exactly once — copy it immediately,' which is a critical side-effect that affects how the agent must handle the output. However, it does not mention authentication requirements or other potential consequences of creation, though the one-time display is the most important behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—two short sentences. The primary action is front-loaded, and the critical warning about the token being shown once immediately follows. Every word earns its place, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (3 simple params, 100% schema coverage) and no output schema, the description adequately covers the essential return behavior by warning that the plaintext token appears exactly once. It is slightly incomplete because it doesn't specify the exact response shape or mention that authentication is required, but the most important operational detail is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage, with clear descriptions for all three parameters (name, abilities, expiresInDays). The description adds no additional parameter semantics beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Create a new CLI token.' This clearly distinguishes it from sibling tools like betadrop_token_list and betadrop_token_delete, which involve different operations on tokens.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. It does not mention that betadrop_token_list is for viewing existing tokens or that betadrop_token_delete is for removing them, nor does it indicate prerequisites such as being logged in. The description only states the action, leaving usage context unaddressed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

betadrop_token_deleteA

Revoke a CLI token by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenIdYesID of the token to revoke (from betadrop_token_list).

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden. 'Revoke' implies the token is invalidated, but the description does not disclose whether authentication is required, whether the action is irreversible, whether it takes effect immediately, or what happens on repeated calls. For a destructive operation, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused sentence that front-loads the action and object with zero filler. Every word contributes to understanding the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one parameter, no output schema), so the description is minimally adequate. However, it omits behavioral context such as auth requirements, post-conditions, and what the response looks like. The schema fills parameter gaps but not operational context, leaving the tool only partially complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema's parameter description already explains where the token ID comes from. The description's phrase 'by its ID' merely restates the schema and adds no new meaning. The baseline of 3 applies because the schema does the necessary work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Revoke a CLI token by its ID' uses a specific verb ('revoke') and a clear resource ('CLI token'). It is unambiguous and easily distinguished from sibling tools like betadrop_token_list and betadrop_token_create, even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description itself gives no explicit when-to-use or when-not-to-use guidance. However, the parameter description '(from betadrop_token_list)' implies a prerequisite workflow: first list tokens to obtain the ID. This is indirect usage guidance rather than an open exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

betadrop_token_listA

List all active CLI tokens for the current account.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses that only 'active' tokens are listed and scopes results to the 'current account', which are meaningful behavioral filters. However, it does not mention authentication requirements, output format, or any potential side effects beyond the implicit read-only nature of 'List'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that front-loads the action and resource. It contains no filler, repetition, or unnecessary explanation, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple: no parameters, no output schema, no annotations. The description tells the agent what will happen - list active CLI tokens for the current account - which is sufficient to invoke the tool. It could mention that an authenticated session is required, but 'current account' strongly implies this, and the operation is a straightforward read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema is empty, and the schema description coverage is 100% by definition. With zero parameters, the description does not need to add parameter-level detail. This matches the zero-parameter baseline of 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a clear resource ('active CLI tokens'), and a scope ('current account'). This distinguishes it from sibling tools like betadrop_token_create and betadrop_token_delete, which mutate tokens, and from betadrop_whoami, which returns account identity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: call this tool whenever you need to enumerate active CLI tokens for the current account. It does not explicitly name alternatives or exclusion conditions, but the sibling tool names make the differentiation intuitive. It just lacks explicit 'use X instead' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

betadrop_upload_statusA

Get the result of the most recent betadrop_publish upload, including the install link. Call this only when betadrop_publish reported the upload was still running.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. 'Get' implies a read-only operation, and mentioning the install link hints at the return value, but it does not disclose what happens if called without a prior running upload, whether it blocks until completion, or whether it returns a transient 'still running' status versus a final result. These gaps leave some ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exactly two sentences with no filler: the first states the action and output, the second states the sole invocation condition. Information is front-loaded and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless status-polling tool, the description covers the core purpose and the key usage condition. However, because there is no output schema and no annotations, it does not explain return structure, error behavior, or what happens if there is no upload in progress. These are minor gaps for such a simple tool, but they keep it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the schema fully covers parameter semantics. The description adds no parameter information, but none is required. Per calibration, 0 parameters earns a baseline of 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and clearly identifies the resource ('result of the most recent betadrop_publish upload') and a key output ('install link'). It naturally distinguishes itself from siblings like betadrop_publish (the triggering action) and betadrop_list_builds (listing historical builds).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides an explicit condition: 'Call this only when betadrop_publish reported the upload was still running.' This is a precise gate that tells the agent exactly when to invoke this tool and indirectly implies not to call it otherwise. No alternative tool is named, but the condition is sufficient given the sibling context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

betadrop_whoamiA

Check authentication status and show the active account and BetaDrop server details.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It clearly indicates a read-only informational operation with no apparent side effects, but it does not state behavior when unauthenticated or describe the exact response semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused sentence with no filler, repetition, or unnecessary detail. It front-loads the core purpose and keeps the resource scope clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple zero-parameter status tool with no output schema, the description adequately states what it does and what information it exposes. Adding notes about unauthenticated behavior or exact server detail fields would improve completeness but is not a major gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and an empty schema with 100% coverage, so there is nothing for the description to add about parameters. The baseline score of 4 applies here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Check') and identifies the resource: authentication status, active account, and BetaDrop server details. This clearly distinguishes it from login/logout, publishing, and token-management siblings, though it does not explicitly name any alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended context is implied: use this when you need to verify the current authentication state or see account/server details. There is no explicit when-to-use guidance or mention of alternatives, which is acceptable for a simple status tool but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv0.2.5
    • First observedbetadrop_help
    • First observedbetadrop_list_builds
    • First observedbetadrop_list_expired_builds
    • First observedbetadrop_login
    • First observedbetadrop_logout
    • First observedbetadrop_publish
    • First observedbetadrop_token_create
    • First observedbetadrop_token_delete
    • First observedbetadrop_token_list
    • First observedbetadrop_upload_status
    • First observedbetadrop_whoami

TDQS

A3.7/5.0

Scored across 11 tools

Disambiguation4/5

Most tools map to a distinct action or resource (auth, publish, builds, tokens), and descriptions clarify intended use. However, betadrop_list_builds and betadrop_list_expired_builds overlap heavily, since the latter is just a filtered shortcut for the former, creating some selection ambiguity.

Naming Consistency4/5

All tools share a uniform betadrop_ prefix and lowercase snake_case, which is helpful. But naming style is mixed: build commands use verb-first (list_builds) while token commands use noun-first (token_list, token_create), and whoami/login/logout are not verb_noun. Overall readable and mostly predictable.

Tool Count5/5

Eleven tools is well-scoped for a BetaDrop-focused server; each tool covers a meaningful part of auth, publishing, build listing, and token management. No obvious bloat or redundancy.

Completeness4/5

Auth lifecycle, publishing/upload status, build listing, expired listing, and token management cover the core workflows an agent would need for BetaDrop. Minor gaps exist, such as no per-build detail/delete or expanded server info, but they are not dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers