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 term | API / legacy name | Role |
|---|---|---|
| Workspace | enterprise | Top-level container for projects and members |
| Project | organization, group | Groups apps, teams, and members under a workspace |
| Team | team (owner / developer / tester) | Role-based membership within a project |
| Shared team | shared_team | Workspace-level team reusable across projects |
Most tools accept:
owner_name— the project slug (agroups[i].namefromget_user_info) or a user's own login name for personal appsapp_id— thepackage_namefield returned byupload_app(bundle identifier on iOS, package name on Android)access_key— the distribution page identifier returned bycreate_distribution; also calleddistribution_keyonupload_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.
| Location | Path |
|---|---|
| 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 progress—login_startwas not called firstThe code expired after 5 minutes— the user did not approve in timeLogin was not approved, or the code expired— explicit rejection or expiry from the serverLogin aborted for security reasons (nonce mismatch)— the server response did not match the nonce sent bylogin_startHit the server's rate limit repeatedly— back off and calllogin_startagain laterRepeated 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
owner_name | string | ✓ | Owner (user login or project slug) |
file_path | string | ✓ | Absolute path to the binary |
message | string | Short build description. Max 32,766 bytes — auto-truncated (response includes a warning) | |
distribution_key | string | Distribution page access_key to update. Takes priority over distribution_name. Max 255 chars | |
distribution_name | string | Distribution page name. Creates a new page if not found (with active=false). Ignored when distribution_key is also specified. Max 255 chars | |
release_note | string | Release note attached to the distribution page | |
disable_notify | boolean | Disable push notification to testers (iOS only) | |
ios_simulator_zip | string | Absolute 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}.
| Parameter | Type | Required | Description |
|---|---|---|---|
owner_name | string | ✓ | Owner (user login or project slug) |
platform | "ios" | "android" | ✓ | App platform |
app_id | string | ✓ | Package name or bundle identifier |
title | string | ✓ | Distribution page title (max 255 chars) |
release_note | string | Release note for this distribution | |
revision | number | Specific revision number to pin | |
active | boolean | Whether the page is active. Default: true |
list_distributions
List all distribution pages for an app.
| Parameter | Type | Required | Description |
|---|---|---|---|
owner_name | string | ✓ | Owner (user login or project slug) |
platform | "ios" | "android" | ✓ | App platform |
app_id | string | ✓ | Package name or bundle identifier |
get_distribution
Get details of a specific distribution page.
| Parameter | Type | Required | Description |
|---|---|---|---|
access_key | string | ✓ | Distribution 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
access_key | string | ✓ | Distribution page access_key |
active | boolean | ✓ | Whether the page is active |
release_scope | see below | ✓ | Access scope |
title | string | New title (max 255 chars) | |
passcode | string | Required when release_scope is "passcode" | |
release_note | string | Release note |
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:
| Value | Behavior |
|---|---|
public | Publicly accessible; indexable by search engines |
unlisted | Anyone with the link can access (default) |
passcode | Requires a passcode (passcode parameter required) |
authorized_only | Only accessible to logged-in team members |
delete_distribution
Delete a distribution page. The page only is deleted — uploaded builds (binaries) are preserved.
| Parameter | Type | Required | Description |
|---|---|---|---|
access_key | string | ✓ | Distribution page access_key |
iOS UDID Management
get_udids
List iOS device UDIDs that have been registered through the distribution page installation flow.
| Parameter | Type | Required | Description |
|---|---|---|---|
owner_name | string | ✓ | Owner (user login or project slug) |
app_id | string | ✓ | Bundle identifier |
unprovisioned_only | boolean | If 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
level | "distribution" | "app" | ✓ | Scope of the notification setting |
access_key | string | when level="distribution" | Distribution page access_key |
owner_name | string | when 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_id | string | when 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:
- Add to workspace (enterprise)
- Add to project (upsert — no error on duplicate)
- Add to the
owner/developer/testerteam (upsert) - For testers only: assign the tester team to the specified app
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace | string | ✓ | Workspace name |
project | string | ✓ | Project name |
user | string | ✓ | Email address or username |
role | "owner" | "developer" | "tester" | ✓ | Role to assign |
platform | "ios" | "android" | when role="tester" | App platform for tester team assignment |
app_id | string | when role="tester" | App for tester team assignment |
Errors:
- Free plan 2-member limit exceeded →
isError: truewith a link tohttps://deploygate.com/settings/plan - User is already in the workspace → silently skipped
list_members
List members of a specific team in a project.
| Parameter | Type | Required | Description |
|---|---|---|---|
project | string | ✓ | Project 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
project | string | ✓ | Project name |
team | "owner" | "developer" | "tester" | ✓ | Team to remove from |
user | string | ✓ | Email 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
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace | string | ✓ | Workspace name |
name | string | ✓ | Shared team name (e.g. "all staff") |
add_shared_team_member
Add a member to a shared team. Specify either email or username — not both.
| Parameter | Type | Required | Description |
|---|---|---|---|
workspace | string | ✓ | Workspace name |
shared_team_id | string | ✓ | Shared team ID |
email | string | either/or | Member's email |
username | string | either/or | Member's username |
description | string | Optional 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
project | string | ✓ | Project name |
platform | "ios" | "android" | ✓ | App platform |
app_id | string | ✓ | Package name or bundle identifier |
team | string | ✓ | Shared team name to assign |