About Appcircle MCP
Appcircle MCP is an MCP server published by appcircleio in the Communication category: mCP server for Appcircle mobile CI/CD platform.
Recent commit activity is the strongest signal that reported issues will get attention.
Install
git clone https://github.com/appcircleio/appcircle-mcpThis server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.
Tools (47)
cancel_build**SIDE EFFECT: cancels a queued or running build** (real, in-progress work is stopped; cannot be resumed). Registered by default; set `AC_MCP_ENABLE_WRITE_TOOLS=false` to opt out.
Parameters not published.
get_app_version_metadataGet store listing metadata for a single app version (app review information, localizations, release information, app version information). appReviewInformation.demoPassword is excluded.
Parameters not published.
get_build_activity_logGet the build activity log (workflow/profile changes, CodePush releases, etc.), optionally filtered by date range and other parameters. Paginated.
Parameters not published.
get_build_configuration_detailsGet a single build configuration by profile ID and configuration ID.
Parameters not published.
get_build_history_reportGet build history report, optionally filtered by date range, build profile, and organization. Paginated.
Parameters not published.
get_build_insights_reportGet a computed Build Insights Report (Health Snapshot + Trends, Root Cause, Artifact Health, Workflow Quality, Queue Time, and Maturity Assessment analysis) over build history, aggregated server-side. Unlike get_build_history_report, this fetches every page internally and returns small pre-aggregated results instead of raw records.
Parameters not published.
get_build_logsGet the logs for a build, optionally scoped to a single step. Defaults to a tail-truncated view to avoid flooding the model's context.
Parameters not published.
get_build_profile_detailsGet a single build profile by ID, optionally including its build configurations.
Parameters not published.
get_build_profile_workflowsGet workflows for a build profile by profile ID.
Parameters not published.
get_build_profilesGet build profiles for the current organization (paginated). Optionally filter by profile name, platform, last build status, and repository source. Optionally sort.
Parameters not published.
Show all 47 tools
get_build_queue_waiting_reportGet the build queue waiting report, optionally filtered by date range. Paginated. Note: on this endpoint, `buildDuration` means queue wait time in minutes, not execution time (unlike get_build_history_report).
Parameters not published.
get_build_statusGet the status of a build (e.g. 0=Success, 1=Failed, 2=Canceled, 3=Timeout, 90=Waiting, 91=Running, 92=Completing, 99=Unknown).
Parameters not published.
get_bundle_identifiersGet all bundle identifiers for the organization (iOS/macOS app bundle IDs).
Parameters not published.
get_certificatesGet all signing certificates for the organization. Sensitive fields (p12Password, p12Binary, metaData, thumbprint) are omitted.
Parameters not published.
get_commit_detailsGet a single commit by commit ID (UUID) or by commit hash (git SHA). Provide either commit_id or commit_hash, not both.
Parameters not published.
get_commits_by_branchGet commits for a build branch (paginated).
Parameters not published.
get_distribution_app_version_reportGet daily usage report for distributed app versions. Paginated; supports filters by profile, OS, organization.
Parameters not published.
get_distribution_profile_detailsGet a single testing distribution profile by ID (with optional app versions pagination).
Parameters not published.
get_distribution_profilesGet testing distribution profiles for the current organization (paginated). Optionally filter by profile name, platform, and authentication type. Optionally sort.
Parameters not published.
get_distribution_sent_reportGet daily usage report for distributed app sharing. Paginated; supports filters by profile, OS, organization.
Parameters not published.
get_enterprise_app_store_app_usage_reportGet app usage report for enterprise app store. start_date and end_date are required. Paginated.
Parameters not published.
get_intune_metadataGet Microsoft Intune app metadata for a single app version (display name, publisher, bundle ID, version, publishing state, applicable device types, categories, etc.).
Parameters not published.
get_keystoresGet all keystores for the organization (e.g. Android signing keystores). Sensitive fields (password, aliasPassword, binary, checkSum, sha256FingerPrint) are omitted.
Parameters not published.
get_last_commitGet the most recent commit on a build branch.
Parameters not published.
get_metadata_localesGet the available store metadata locales for a single app version (name, code, localized, isPrimary).
Parameters not published.
get_provisioning_profilesGet provisioning profiles for the organization (e.g. iOS/macOS). Sensitive/large fields (binary, metaData, certificateThumbPrints, provisionedDevices, connectApiKeyId) are omitted. Optionally filter by app (bundle) ID.
Parameters not published.
get_publish_activity_logGet the publish activity log (re-sign, publish flow events, etc.), optionally filtered by date range and other parameters. Paginated.
Parameters not published.
get_publish_detailsGet the publish flow run details for a single app version (status, timing, ordered steps with run history/artifacts/log resource IDs).
Parameters not published.
get_publish_flowsGet the publish flows configured for a publish profile (name, ID, full flow document YAML).
Parameters not published.
get_publish_metadata_lock_statusGet whether a publish profile's store metadata is locked for editing.
Parameters not published.
get_publish_profile_detailsGet a single publish profile by platform type and ID (with optional app versions pagination).
Parameters not published.
get_publish_profilesGet publish profiles for the current organization for a given platform type (paginated). Optionally filter by flow status, target marketplace, release-candidate binary presence, and store status. Optionally sort.
Parameters not published.
get_publish_resign_reportGet publish resign report, optionally filtered by date range, app name, organization, and status. Paginated.
Parameters not published.
get_publish_status_reportGet publish status report, optionally filtered by date range, app name, organization, and status. Paginated.
Parameters not published.
get_publish_step_logsGet the logs for a publish flow run, optionally scoped to a single step. Defaults to a tail-truncated view to avoid flooding the model's context.
Parameters not published.
get_signing_activity_logGet the signing activity log (e.g. certificate/provisioning profile/keystore expiry notices), optionally filtered by date range and other parameters. Paginated.
Parameters not published.
get_signing_reportGet signing report, optionally filtered by date range, organization, OS, and build status. Paginated.
Parameters not published.
get_store_profile_detailsGet a single enterprise app store profile by ID (with optional app versions pagination).
Parameters not published.
get_store_profilesGet enterprise app store profiles for the current organization (paginated). Does not support search, but can filter by platform, publish type, and visibility. Optionally sort.
Parameters not published.
get_testing_groupsGet all testing distribution groups for the organization, including each group's member tester emails and group type.
Parameters not published.
get_variable_groupsGet all build environment variable groups for the organization, including each group's variables (key, value, isSecret, isFile). Secret values are already redacted by the API.
Parameters not published.
get_workflow_detailGet a single workflow by build profile ID and workflow ID.
Parameters not published.
send_app_version_to_testers**SIDE EFFECT: sends a real notification** to testers/a testing group, dispatching a distribution task for a specific app version. Registered by default; set `AC_MCP_ENABLE_WRITE_TOOLS=false` to opt out.
Parameters not published.
start_publish**SIDE EFFECT: starts a publish flow run** (or restarts it from a specific step) -- real publishing work (e.g. uploading to the App Store/Play Store/Intune). Registered by default; set `AC_MCP_ENABLE_WRITE_TOOLS=false` to opt out.
Parameters not published.
stop_publish**SIDE EFFECT: cancels a running publish flow run** (real, in-progress work is stopped; cannot be resumed). Registered by default; set `AC_MCP_ENABLE_WRITE_TOOLS=false` to opt out.
Parameters not published.
trigger_build**SIDE EFFECT: starts a new real build run** (queues an actual build, consuming build minutes/credits) either on a branch (latest synced commit) or for one specific commit. Registered by default; set `AC_MCP_ENABLE_WRITE_TOOLS=false` to opt out.
Parameters not published.
update_app_version_release_notes**SIDE EFFECT: overwrites the release notes ("message") shown to testers** for a distribution app version. Returns the updated app version object (excludes certThumbPrints). Registered by default; set `AC_MCP_ENABLE_WRITE_TOOLS=false` to opt out.
Parameters not published.
Ask AI
Ask AI about Appcircle MCP
Powered by Claude · Grounded in docs
Security checks
- ✓README presentThe repository ships documentation.
5 checks have not been run yet.
README
Appcircle MCP Server
MCP server for Appcircle: exposes Build, Signing Identities, Testing Distribution, Enterprise App Store, Publish to Stores, and Reporting tools to any MCP-capable client (Claude Desktop, Cursor, VS Code, etc.). The Appcircle MCP Server acts as the bridge between AI tools and Appcircle; thus, AI agents, assistants and chatbots to safely access and interact with Appcircle resources through structured, governed, and task-level tools.
Use Cases
- CI/CD and Workflow Intelligence: Monitor pipeline runs, track release status, and get insights into your mobile CI/CD workflows.
- Configuration and Environment Insights: Query build configurations and signing setup to understand how a project is configured and where issues may originate.
- Reporting and Operational Insights: Generate summaries of CI stability, recurring issues, pipeline performance, and overall CI/CD health.
Running Modes
You can use the MCP server in four ways:
| Mode | Summary |
|---|---|
| 1. Remote host | Connect to https://mcp.appcircle.io. No local install; your client sends your Appcircle token (e.g. Authorization: Bearer <token>) on each request. |
| 2. Local (stdio) | Run the server from source: clone the repo, optionally use a venv, then run appcircle-mcp (default transport is stdio). Requires Python and pip. Set APPCIRCLE_ACCESS_TOKEN in the environment. Your MCP client runs the server as a subprocess. |
| 3. Local (streamable-http) | Run the server locally over HTTP: use --transport streamable-http and optionally --host / --port (e.g. appcircle-mcp --transport streamable-http --host 127.0.0.1 --port 8000). Clients connect to that URL and send their token in the request. |
| 4. Local (Docker) | Run the official Docker image on your machine. Requires Docker. Use the image’s default port or override with --port; see the image documentation for exact usage. |
Detailed client configuration (Cursor, Claude, etc.) lives in the dedicated installation guides; this section is a high-level summary only.
Installation
Client-specific setup guides:
- Claude Applications - Installation guide for Claude Desktop and Claude Code CLI.
- Cursor IDE - Installation guide for Cursor IDE.
- Codex - Installation guide for Codex app and Codex CLI.
- Antigravity IDE - Installation guide for Antigravity IDE.
- VS Code (GitHub Copilot) - Installation guide for VS Code with GitHub Copilot.
- Windsurf IDE - Installation guide for Windsurf IDE.
- Gemini CLI - Installation guide for Gemini CLI.
- GitHub Copilot CLI - Installation guide for GitHub Copilot CLI.
Configuration (Environment Variables)
| Variable | Required | Description |
|---|---|---|
APPCIRCLE_ACCESS_TOKEN |
Yes (stdio only) | Appcircle API access token. Required when using stdio transport. For streamable-http, each client sends its own token. See Obtaining a token for how to get one. |
APPCIRCLE_API_URL |
No | API base URL (default: https://api.appcircle.io may differ for self-hosted users). |
APPCIRCLE_MCP_ALLOWED_HOST |
No (streamable-http only) | Public hostname for the MCP server (e.g. mcp.appcircle.io). Set this when deploying behind a reverse proxy so the server accepts the Host header from clients. Omit for localhost. |
APPCIRCLE_MCP_PORT |
No (streamable-http only) | Bind port for the HTTP server (default: 8000). Overridden by --port if provided. Useful for on-prem or Docker when a specific port is required. |
LOG_LEVEL |
No | Logging level, e.g. DEBUG, INFO (default: INFO). |
APPCIRCLE_EXCLUDED_TOOLSETS |
No | Comma-separated toolsets to exclude (e.g. build_module,report). See Toolsets below. |
Set these in your shell or in your MCP client’s configuration.
Toolsets
Available Toolsets
The following sets of tools are available:
| Toolset | Description |
|---|---|
build_module |
Build profiles, configurations, workflows, commits, and pipeline operations |
signing_identities |
Signing identities and bundle identifiers |
testing_distribution |
Testing distribution profiles and distribution details |
publish_to_stores |
Publish profiles and store publishing operations |
enterprise_app_store |
Enterprise app store profiles and store details |
report |
Reporting: build history, distribution, signing, publish status, and related reports |
You can exclude one or more toolsets so their tools are not registered. Exclusions can be set via CLI arguments or the APPCIRCLE_EXCLUDED_TOOLSETS environment variable; both are merged (union).
- CLI:
--exclude toolset1 toolset2or--exclude-toolsets toolset1,toolset2 - Env:
APPCIRCLE_EXCLUDED_TOOLSETS=build_module,report
Example MCP config (Cursor / Claude Desktop) with exclusions:
{
"mcpServers": {
"appcircle": {
"command": "appcircle-mcp",
"args": ["--exclude", "report"]
}
}
}
Tools
Tools are exposed via MCP tools/list. Reference below lists all tools by toolset; for response shape and examples see docs/tool_contract.md.
-
get_build_profiles - Get build profiles for the current organization (paginated). Optionally filter by profile name.
- Access level: read
page: Page number (1-based). Default: 1. (number, optional)size: Page size (1-100). Default: 25. Values above 100 are capped at 100. (number, optional)search: Optional search term to filter profiles by name (case-insensitive partial match). (string, optional)
-
get_build_profile_details - Get a single build profile by ID, optionally including its build configurations.
- Access level: read
profile_id: The build profile ID (e.g. UUID). (string, required)configurations: If true, also fetch the profile's build configurations. Default: false. (boolean, optional)
-
get_build_configuration_details - Get a single build configuration by profile ID and configuration ID.
- Access level: read
profile_id: The build profile ID (e.g. UUID). (string, required)configuration_id: The build configuration ID (e.g. UUID). (string, required)
-
get_build_profile_workflows - Get workflows for a build profile by profile ID.
- Access level: read
profile_id: The build profile ID (e.g. UUID). (string, required)
-
get_workflow_detail - Get a single workflow by build profile ID and workflow ID.
- Access level: read
profile_id: The build profile ID (e.g. UUID). (string, required)workflow_id: The workflow ID (e.g. UUID). (string, required)
-
get_commits_by_branch - Get commits for a build branch (paginated).
- Access level: read
branch_id: The branch ID (e.g. UUID). (string, required)page: Page number (1-based). If provided with size, enables pagination. Default: 1. (number, optional)size: Page size. If provided with page, enables pagination. Default: 25, max 100. (number, optional)
-
get_commit_details - Get a single commit by commit ID (UUID) or by commit hash (git SHA). Provide either commit_id or commit_hash, not both.
- Access level: read
commit_id: The commit ID (UUID). (string, optional)commit_hash: The commit hash (git SHA). (string, optional)
-
get_bundle_identifiers - Get all bundle identifiers for the organization (iOS/macOS app bundle IDs).
- Access level: read
- No parameters.
-
get_certificates - Get all signing certificates for the organization. Sensitive fields (p12Password, p12Binary, metaData, thumbprint) are omitted.
- Access level: read
- No parameters.
-
get_keystores - Get all keystores for the organization (e.g. Android signing keystores). Sensitive fields (password, aliasPassword, binary, checkSum, sha256FingerPrint) are omitted.
- Access level: read
- No parameters.
-
get_provisioning_profiles - Get provisioning profiles for the organization (e.g. iOS/macOS). Sensitive/large fields (binary, metaData, certificateThumbPrints, provisionedDevices, connectApiKeyId) are omitted. Optionally filter by app (bundle) ID.
- Access level: read
app_id: Optional app (bundle) ID to filter provisioning profiles (e.g. com.example.app). (string, optional)
-
get_distribution_profiles - Get testing distribution profiles for the current organization (paginated). Optionally filter by profile name.
- Access level: read
page: Page number (1-based). Default: 1. (number, optional)size: Page size (1-100). Default: 25, max 100. (number, optional)search: Optional search term to filter profiles by name. (string, optional)
-
get_distribution_profile_details - Get a single testing distribution profile by ID (with optional app versions pagination).
- Access level: read
profile_id: The distribution profile ID (e.g. UUID). (string, required)page: Page number for app versions (1-based). Default: 1. (number, optional)size: Page size for app versions (1-100). Default: 25, max 100. (number, optional)
-
get_publish_profiles - Get publish profiles for the current organization for a given platform type (paginated). Optionally filter by flow status.
- Access level: read
platform_type: Platform type of publish profiles ("ios" or "android"). (string, required)page: Page number (1-based). Default: 1. (number, optional)size: Page size (1-100). Default: 25, max 100. (number, optional)flow_status: Optional flow status code to filter by (e.g. 0=Success, 1=Failed, 91=Running). (number, optional)
-
get_publish_profile_details - Get a single publish profile by platform type and ID (with optional app versions pagination).
- Access level: read
platform_type: Platform type ("ios" or "android"). (string, required)profile_id: The publish profile ID (e.g. UUID). (string, required)page: Page number for app versions (1-based). Default: 1. (number, optional)size: Page size for app versions (1-100). Default: 25, max 100. (number, optional)
-
get_store_profiles - Get enterprise app store profiles for the current organization (paginated).
- Access level: read
page: Page number (1-based). Default: 1. (number, optional)size: Page size (1-100). Default: 25, max 100. (number, optional)
-
get_store_profile_details - Get a single enterprise app store profile by ID (with optional app versions pagination).
- Access level: read
profile_id: The enterprise app store profile ID (e.g. UUID). (string, required)page: Page number for app versions (1-based). Default: 1. (number, optional)size: Page size for app versions (1-100). Default: 25, max 100. (number, optional)
-
get_build_history_report - Get build history report, optionally filtered by date range, build profile, and organization. Paginated.
- Access level: read
start_date: Optional start date (YYYY-MM-DD). (string, optional)end_date: Optional end date (YYYY-MM-DD). (string, optional)page: Page number (default: 1). (number, optional)size: Items per page (1-100, default: 50). (number, optional)build_profile_name: Filter by build profile name. (string, optional)organization_id: Filter by organization UUID. (string, optional)
-
get_distribution_app_version_report - Get daily usage report for distributed app versions. Paginated; supports filters by profile, OS, organization.
- Access level: read
start_date: Optional start date (YYYY-MM-DD). (string, optional)end_date: Optional end date (YYYY-MM-DD). (string, optional)page: Page number (default: 1). (number, optional)size: Items per page (1-100, default: 50). (number, optional)profile_name: Filter by distribution profile name. (string, optional)os: Filter by OS ("ios" or "android"). (string, optional)organization_id: Filter by organization UUID. (string, optional)
-
get_distribution_sent_report - Get daily usage report for distributed app sharing. Paginated; supports filters by profile, OS, organization.
- Access level: read
start_date: Optional start date (YYYY-MM-DD). (string, optional)end_date: Optional end date (YYYY-MM-DD). (string, optional)page: Page number (default: 1). (number, optional)size: Items per page (1-100, default: 50). (number, optional)profile_name: Filter by distribution profile name. (string, optional)os: Filter by OS ("ios" or "android"). (string, optional)organization_id: Filter by organization UUID. (string, optional)
-
get_enterprise_app_store_app_usage_report - Get app usage report for enterprise app store. start_date and end_date are required. Paginated.
- Access level: read
start_date: Start date (YYYY-MM-DD). (string, required)end_date: End date (YYYY-MM-DD). (string, required)page: Page number (default: 1). (number, optional)size: Items per page (1-100, default: 50). (number, optional)organization_id: Optional filter by organization UUID. (string, optional)
-
get_publish_resign_report - Get publish resign report, optionally filtered by date range, app name, organization, and status. Paginated.
- Access level: read
start_date: Optional start date (YYYY-MM-DD). (string, optional)end_date: Optional end date (YYYY-MM-DD). (string, optional)page: Page number (default: 1). (number, optional)size: Items per page (1-100, default: 50). (number, optional)app_name: Filter by app name. (string, optional)organization_id: Filter by organization UUID. (string, optional)status: Filter by resign status (0=waiting, 1=processing, 2=succeeded, 3=failed, 4=cancelled, 5=timeout). (number, optional)
-
get_publish_status_report - Get publish status report, optionally filtered by date range, app name, organization, and status. Paginated.
- Access level: read
start_date: Optional start date (YYYY-MM-DD). (string, optional)end_date: Optional end date (YYYY-MM-DD). (string, optional)page: Page number (default: 1). (number, optional)size: Items per page (1-100, default: 50). (number, optional)app_name: Filter by app name. (string, optional)organization_id: Filter by organization UUID. (string, optional)status: Filter by publish status (e.g. 0=Success, 1=Failed, 91=Running). (number, optional)
-
get_signing_report - Get signing report, optionally filtered by date range, organization, OS, and build status. Paginated.
- Access level: read
start_date: Optional start date (YYYY-MM-DD). (string, optional)end_date: Optional end date (YYYY-MM-DD). (string, optional)page: Page number (default: 1). (number, optional)size: Items per page (1-100, default: 50). (number, optional)organization_id: Filter by organization UUID. (string, optional)os: Filter by OS ("ios" or "android"). (string, optional)build_status: Filter by build status (e.g. 0=Success, 1=Failed, 91=Running). (number, optional)
Running the server
From the repo root:
python -m src.server
Or after pip install -e .:
appcircle-mcp
The server runs over stdio (or SSE/HTTP depending on how your client starts it).
Response format
Every tool returns a standard envelope:
- Success:
{ "success": true, "data": <payload>, "meta": { ... } }
datais the tool result;metais optional (e.g.count,page,filters). - Error:
{ "success": false, "error": { "tool", "type", "message", "details" } }
Same shape for all tools so clients can parse errors consistently.
Full specification: docs/tool_contract.md.
Testing
Install with dev dependencies:
pip install -e ".[dev]"
Unit tests (default)
Use a mocked API; no APPCIRCLE_ACCESS_TOKEN needed. Default pytest only runs these (see testpaths in pyproject.toml):
pytest test/unit/ -v
- Single file:
pytest test/unit/tools/build_module/test_get_build_profiles.py -v - With coverage:
pytest test/unit/ --cov=src --cov-report=term-missing
Integration tests
Call the real Appcircle API. Set APPCIRCLE_ACCESS_TOKEN in the environment, then run:
pytest test/integration/ -v
- All integration tests:
pytest test/integration/ -v - By tool:
pytest test/integration/build_module/ -v,pytest test/integration/report/ -v, etc. - By marker:
pytest -m integration -v(when running from repo root; includes only integration tests if both unit and integration are collected)
If APPCIRCLE_ACCESS_TOKEN is not set, integration tests are skipped (no failure).
Optional env vars for integration tests (when discovery fails or tests need real IDs; omit to skip those tests):
| Variable | Description |
|---|---|
APPCIRCLE_TEST_ORGANIZATION_ID |
Organization UUID. Used by test_with_organization_id (enterprise app store app usage report). |
APPCIRCLE_TEST_BRANCH_ID |
Branch UUID. Used by get_commits_by_branch and related tests when no branch can be discovered from the API. |
APPCIRCLE_TEST_COMMIT_ID |
Commit UUID. Used by get_commit_details tests when no commit can be discovered from the API. |
Security
This project depends on third-party open-source packages listed in
pyproject.toml. While we pin dependency version ranges and
ship a lockfile (uv.lock) with cryptographic hashes, these packages are
maintained independently and provided "as-is." Appcircle makes no guarantees
regarding the security or reliability of third-party dependencies.
We recommend auditing installed packages before use:
uv run pip-audit
README copy captured when this server was indexed; it may lag the repository. The original is authoritative.