Huawei AppGallery Connect MCP: upload APK/AAB, update metadata, submit and manage app releases.
A Model Context Protocol (MCP) server for managing app publishing on Huawei AppGallery Connect. Integrates directly with Claude Desktop or any MCP-compatible client.
channel_id=2)Claude Code:
claude mcp add --from-registry io.github.AgiMaulana/HuaweiAppGalleryMcp
Other MCP clients:
Find it at registry.modelcontextprotocol.io — search for huawei-appgallery.
pip install huawei-app-gallery-mcp
Or with uv:
uv pip install huawei-app-gallery-mcp
These are Connect API credentials — different from HMS Core app credentials.
Create a .env file in your working directory (the server loads it automatically):
HUAWEI_CLIENT_ID=your_connect_api_client_id
HUAWEI_CLIENT_SECRET=your_connect_api_client_secret
# Optional: set a default app ID so you don't have to pass it to every tool call
HUAWEI_APP_ID=your_app_id
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"huawei-appgallery": {
"command": "huawei-app-gallery-mcp",
"env": {
"HUAWEI_CLIENT_ID": "your_client_id",
"HUAWEI_CLIENT_SECRET": "your_client_secret",
"HUAWEI_APP_ID": "your_app_id"
}
}
}
}
Create /Library/Application Support/ClaudeCode/managed-mcp.json (macOS) or /etc/claude-code/managed-mcp.json (Linux):
{
"mcpServers": {
"huawei-appgallery": {
"type": "stdio",
"command": "huawei-app-gallery-mcp",
"env": {
"HUAWEI_CLIENT_ID": "your_client_id",
"HUAWEI_CLIENT_SECRET": "your_client_secret",
"HUAWEI_APP_ID": "your_app_id"
}
}
}
}
All tools accept an optional app_id argument. If omitted, HUAWEI_APP_ID from the environment is used as the default.
| Tool | Description |
|---|---|
query_app_info | Query current app metadata (name, description, category, ratings, etc.), optionally for a specific release channel via channel_id |
update_app_info | Update app metadata in the AppGallery Connect draft |
update_language_info | Add or update a localized store listing for a specific language |
delete_language_info | Remove a localized store listing |
get_upload_url | Obtain a pre-signed upload URL and auth code before uploading a file |
upload_app_file | Upload an APK/AAB from local disk and attach it to the app draft (auto-chunked for >4 GB) |
update_app_file_info | Manually attach already-uploaded files to the app draft |
query_compile_status | Query AAB compilation status for one or more package IDs |
submit_app | Submit the app for review and release (supports full, phased, scheduled, and open testing via channel_id=2) |
submit_app_with_file | Submit when the binary is hosted on your own server |
change_phased_release_state | Change phased release status: proceed, roll back, or stop |
update_phased_release | Convert phased release to full release or update the rollout schedule/percentage |
update_release_time | Update the scheduled release time (only when app is in Releasing state) |
set_gms_dependency | Report whether the app depends on GMS |
get_download_report_url | Get download URL for the app download & installation report (CSV/Excel, max 180 days) |
get_install_failure_report_url | Get download URL for the installation failure report (CSV/Excel, max 180 days) |
Upload and release a new version:
Upload
/path/to/app-release.aab(AAB, file type 5) then submit it for a full release.
Phased rollout:
Submit the app for a phased release to 20% of users.
Open testing:
Submit the app for open testing (channel_id=2).
Inspect open testing:
Query the app metadata for the open testing channel with
query_app_info(channel_id=2).
Update release notes:
Update the English release notes to "Bug fixes and performance improvements".
Scheduled release:
Submit the app for release on March 20, 2026 at 10:00 UTC.
Download report:
Get the download and installation report URL for the last 30 days in English CSV format.
Update app info → Update language info → Upload APK/AAB → Submit app
update_app_info / update_language_info to set metadata and release notesupload_app_file to upload the binary (handles chunking automatically)submit_app to trigger review and releaseFor package release instructions, see docs/RELEASE.md.
This server wraps the AppGallery Connect Publishing API.
MIT
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
uvx huawei-app-gallery-mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-agimaulana-huaweiappgallerymcp": {
"command": "uvx",
"args": [
"huawei-app-gallery-mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referencehuawei-app-gallery-mcppypiio.github.AgiMaulana/HuaweiAppGalleryMcp works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.