Skip to main content

MCP Tools Reference

The plugin exposes the following MCP tools. In normal use you do not invoke them by name — the skills and Claude itself orchestrate them from natural-language conversation. This page is the exhaustive reference for each tool's parameters, return values, and caveats.

Identifier model

DeployGate uses several identifier slugs that appear across multiple tools. The underlying API has historical names that differ from the user-facing terminology:

User-facing termAPI / legacy nameRole
WorkspaceenterpriseTop-level container for projects and members
Projectorganization, groupGroups apps, teams, and members under a workspace
Teamteam (owner / developer / tester)Role-based membership within a project
Shared teamshared_teamWorkspace-level team reusable across projects

Most tools accept:

  • owner_name — the project slug (a groups[i].name from get_user_info) or a user's own login name for personal apps
  • app_id — the package_name field returned by upload_app (bundle identifier on iOS, package name on Android)
  • access_key — the distribution page identifier returned by create_distribution; also called distribution_key on upload_app

Authentication

The plugin uses a browser-based device authorization code flow — you never paste an API token. The token is saved on your machine and reused across future agent sessions.

LocationPath
macOS / Linux~/.config/deploygate/token (or $XDG_CONFIG_HOME/deploygate/token)
Windows%APPDATA%\deploygate\token

The file is written with mode 0600 and contains only the issued token.

login_start

Begin the device authorization code flow. Takes no parameters.

Returns: Text containing a verification URL of the form https://deploygate.com/app/sessions/codes?code=XXXXXXXX, the short code, and an expiry (typically 5 minutes). The user opens the URL in a browser where they are signed in to DeployGate and approves the login.

After presenting the URL, immediately call login_wait to receive the token.

login_wait

Wait for the user to approve the login started by login_start. Polls the server on the server-specified interval until the code is authorized, rejected, or expired. Takes no parameters.

Returns: On success, text containing the authenticated user name, the JSON organization list (workspace names and projects), and the path where the token was saved. The token is also stored client-side so subsequent tool calls authenticate automatically.

Errors: Returned with isError: true for any of:

  • No login in progresslogin_start was not called first
  • The code expired after 5 minutes — the user did not approve in time
  • Login was not approved, or the code expired — explicit rejection or expiry from the server
  • Login aborted for security reasons (nonce mismatch) — the server response did not match the nonce sent by login_start
  • Hit the server's rate limit repeatedly — back off and call login_start again later
  • Repeated network errors while polling — check connectivity and retry

In all error cases, call login_start again to retry.

logout

Revoke the stored token on the DeployGate server and delete the local token file. Takes no parameters.

Returns: Logged out. on success. If the server-side revoke fails, the message indicates that the local token was deleted regardless. If no token is stored, returns Already logged out.

get_user_info

Return the workspace/projects associated with the stored token. Takes no parameters.

Returns: A JSON array of workspaces, each with a name (workspace slug) and a groups array of projects.

Errors: If the stored token is rejected by the server (unauthorized), the local token file is cleared and the response says The stored token is invalid. Run login_start to log in again.

App Upload

upload_app

Upload an IPA, APK, or AAB to DeployGate. Optionally associates the upload with a distribution page.

ParameterTypeRequiredDescription
owner_namestringOwner (user login or project slug)
file_pathstringAbsolute path to the binary
messagestringShort build description. Max 32,766 bytes — auto-truncated (response includes a warning)
distribution_keystringDistribution page access_key to update. Takes priority over distribution_name. Max 255 chars
distribution_namestringDistribution page name. Creates a new page if not found (with active=false). Ignored when distribution_key is also specified. Max 255 chars
release_notestringRelease note attached to the distribution page
disable_notifybooleanDisable push notification to testers (iOS only)
ios_simulator_zipstringAbsolute path to an iOS simulator build zip. Enables Instant Device (browser preview). Build with xcodebuild -sdk iphonesimulator and zip the .app directory. Must be uploaded together with an IPA

Returns: JSON response from the DeployGate API, including the revision URL and — when a distribution page is touched — its access_key and URL. The response's package_name is the app_id to pass to subsequent distribution / UDID / notification tools.

Distribution Page Management

create_distribution

Create a new distribution page for an app. Returns the access_key that forms the public URL https://deploygate.com/distributions/{access_key}.

ParameterTypeRequiredDescription
owner_namestringOwner (user login or project slug)
platform"ios" | "android"App platform
app_idstringPackage name or bundle identifier
titlestringDistribution page title (max 255 chars)
release_notestringRelease note for this distribution
revisionnumberSpecific revision number to pin
activebooleanWhether the page is active. Default: true

list_distributions

List all distribution pages for an app.

ParameterTypeRequiredDescription
owner_namestringOwner (user login or project slug)
platform"ios" | "android"App platform
app_idstringPackage name or bundle identifier

get_distribution

Get details of a specific distribution page.

ParameterTypeRequiredDescription
access_keystringDistribution page access_key

Call this before update_distribution to retrieve the current active and release_scope values, which are required on update.

update_distribution

Update a distribution page.

ParameterTypeRequiredDescription
access_keystringDistribution page access_key
activebooleanWhether the page is active
release_scopesee belowAccess scope
titlestringNew title (max 255 chars)
passcodestringRequired when release_scope is "passcode"
release_notestringRelease note
caution

Both active and release_scope are always required, even when you only want to change the title. Call get_distribution first to retrieve the current values, then pass them through unchanged.

release_scope values:

ValueBehavior
publicPublicly accessible; indexable by search engines
unlistedAnyone with the link can access (default)
passcodeRequires a passcode (passcode parameter required)
authorized_onlyOnly accessible to logged-in team members

delete_distribution

Delete a distribution page. The page only is deleted — uploaded builds (binaries) are preserved.

ParameterTypeRequiredDescription
access_keystringDistribution page access_key

iOS UDID Management

get_udids

List iOS device UDIDs that have been registered through the distribution page installation flow.

ParameterTypeRequiredDescription
owner_namestringOwner (user login or project slug)
app_idstringBundle identifier
unprovisioned_onlybooleanIf true, return only devices not yet in the provisioning profile (is_provisioned=false)

Returns: An array of entries with udid, user_name, device_name, and is_provisioned.

Notification Settings

get_notification_settings_url

Generate the URL for configuring Slack / Microsoft Teams / Chatwork notifications. The user opens the URL in a browser to complete setup — there is no API-only configuration path.

ParameterTypeRequiredDescription
level"distribution" | "app"Scope of the notification setting
access_keystringwhen level="distribution"Distribution page access_key
owner_namestringwhen level="app"Owner (user login or project slug)
owner_type"organization" | "user"when level="app"Whether the app belongs to a project or to a user
platform"ios" | "android"when level="app"App platform
app_idstringwhen level="app"Package name or bundle identifier

Returns: Text containing the URL. Relay it to the user verbatim — do not add query parameters.

Member Management

add_member

Add a member to a project with a role. This is a single tool that orchestrates 3–4 API calls:

  1. Add to workspace (enterprise)
  2. Add to project (upsert — no error on duplicate)
  3. Add to the owner / developer / tester team (upsert)
  4. For testers only: assign the tester team to the specified app
ParameterTypeRequiredDescription
workspacestringWorkspace name
projectstringProject name
userstringEmail address or username
role"owner" | "developer" | "tester"Role to assign
platform"ios" | "android"when role="tester"App platform for tester team assignment
app_idstringwhen role="tester"App for tester team assignment

Errors:

  • Free plan 2-member limit exceeded → isError: true with a link to https://deploygate.com/settings/plan
  • User is already in the workspace → silently skipped

list_members

List members of a specific team in a project.

ParameterTypeRequiredDescription
projectstringProject name
team"owner" | "developer" | "tester"Team to list

remove_member

Remove a member from a team. The user remains in the workspace and project — only the team membership is removed.

ParameterTypeRequiredDescription
projectstringProject name
team"owner" | "developer" | "tester"Team to remove from
userstringEmail address or username

Shared Team Management

Shared teams are workspace-level teams that can be assigned to multiple apps across projects. When assigned to an app, shared team members get tester-level access.

create_shared_team

ParameterTypeRequiredDescription
workspacestringWorkspace name
namestringShared team name (e.g. "all staff")

add_shared_team_member

Add a member to a shared team. Specify either email or username — not both.

ParameterTypeRequiredDescription
workspacestringWorkspace name
shared_team_idstringShared team ID
emailstringeither/orMember's email
usernamestringeither/orMember's username
descriptionstringOptional description (max 255 chars)

assign_shared_team_to_app

Assign a shared team to an app. Members of the shared team get tester-level access.

ParameterTypeRequiredDescription
projectstringProject name
platform"ios" | "android"App platform
app_idstringPackage name or bundle identifier
teamstringShared team name to assign