Skip to main content
Glama
appcircleio

appcircle-mcp

Official
by appcircleio

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.

Related MCP server: codemagic-mcp-server

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:

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.

AC_MCP_ENABLE_WRITE_TOOLS

No

Write/action tools (e.g. trigger_build, cancel_build) are registered by default. Set to false/0/no/off to opt out and not register them at all (not just disable at call time).

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 toolset2 or --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, platform, last build status, and repository source. Optionally sort.

    • 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 (case-insensitive partial match on profile name; the API's search may also match other profile fields). (string, optional)

    • platform: Optional list of platform codes to filter by. Allowed values: 1=iOS, 2=Android. (list of numbers, optional)

    • last_build_status: Optional list of last build status codes to filter by. Allowed values: 0=Success, 1=Failed, 2=Canceled, 3=Timeout, 90=Waiting, 91=Running. (list of numbers, optional)

    • repository_source: Optional list of repository source codes to filter by. Allowed values: 1=GitHub, 2=Bitbucket, 3=GitLab, 4=Azure DevOps, 6=Public Repository, 7=Private Repository, 8=SSH. (list of numbers, optional)

    • sort: Optional sort field code. Allowed values: 1=Profile Name, 2=Create Date, 3=Last Build Date. (number, optional)

    • sort_direction: Optional sort direction code. Allowed values: 1=ASC, 2=DESC. (number, 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_last_commit - Get the most recent commit on a build branch.

    • Access level: read

    • branch_id: The branch ID (e.g. UUID). (string, required)

  • get_build_status - Get the status of a build (e.g. 0=Success, 1=Failed, 2=Canceled, 3=Timeout, 90=Waiting, 91=Running, 92=Completing, 99=Unknown).

    • Access level: read

    • commit_id: The commit ID (UUID). (string, required)

    • build_id: The build ID (UUID). (string, required)

  • get_build_logs - Get the logs for a build, optionally scoped to a single step. Defaults to a tail-truncated view to avoid flooding the model's context.

    • Access level: read

    • commit_id: The commit ID (UUID). (string, required)

    • build_id: The build ID (UUID). (string, required)

    • step: Optional exact step name (case-insensitive) to scope output to one step's log block. (string, optional)

    • full_log: If true, return the entire log instead of the default tail. Still capped at 256 KB. Default: false. (boolean, optional)

    • tail_lines: Number of lines to keep from the end when not using full_log. Default: 200, max 1000. (number, optional)

    • grep: Case-insensitive substring filter applied to lines before truncation. (string, optional)

  • get_variable_groups - Get 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.

    • Access level: read

    • Takes no parameters.

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

    • Access level: write

    • profile_id: The build profile ID (e.g. UUID). Required in branch mode (commit_id not given); unused in commit mode. (string, optional)

    • workflow_id: The workflow ID (e.g. UUID). Required in branch mode. Optional in commit mode (uses the last-used/default workflow if omitted). (string, optional)

    • branch_name: Optional branch name (e.g. "main"). Branch mode only; falls back to the profile's default branch if omitted. Must not be given together with commit_id. (string, optional)

    • commit_id: The commit's own ID (not its git hash) to trigger a build for a specific commit instead of the latest one on a branch. Must not be given together with branch_name. (string, optional)

    • configuration_id: Optional build configuration ID (e.g. UUID) to use instead of the default. (string, optional)

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

    • Access level: write

    • task_id: The build's task ID (the "taskId" field returned by trigger_build). (string, required)

  • 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, platform, and authentication type. Optionally sort.

    • 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 (case-insensitive partial match on profile name; the API's search may also match other profile fields). (string, optional)

    • platform: Optional list of platform codes to filter by. Allowed values: 1=iOS, 2=Android. (list of numbers, optional)

    • authentication_type: Optional list of authentication type codes to filter by. Allowed values: 1=None, 3=Static Login, 4=LDAP, 5=SSO. (list of numbers, optional)

    • sort: Optional sort field code. Allowed values: 1=Profile Name, 2=Create Date, 3=Last Upload Date. (number, optional)

    • sort_direction: Optional sort direction code. Allowed values: 1=ASC, 2=DESC. (number, 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_testing_groups - Get all testing distribution groups for the organization, including each group's member tester emails and group type.

    • Access level: read

    • Takes no parameters.

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

    • Access level: write

    • profile_id: The distribution profile ID (e.g. UUID). (string, required)

    • app_version_id: The app version ID (e.g. UUID). (string, required)

    • message: The new release notes text. (string, required)

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

    • Access level: write

    • profile_id: The distribution profile ID (e.g. UUID). (string, required)

    • app_version_id: The app version ID (e.g. UUID). (string, required)

    • message: The notification message shown to testers. (string, required)

    • testers: List of testers to send to. Each entry is either a tester's email address or a testing group ID (the "id" field from get_testing_groups). (list of strings, required)

  • get_publish_profiles - Get 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.

    • 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)

    • market_place_type: Optional list of target marketplace codes to filter by. Allowed values depend on platform_type -- ios: 0=Not Available, 1=App Store Connect, 4=Intune; android: 0=Not Available, 2=Google Play, 3=AppGallery, 4=Intune. (list of numbers, optional)

    • has_rc_binary: Optional filter for whether the profile has a release-candidate binary. (boolean, optional)

    • store_status: Optional list of store status codes to filter by. Allowed values depend on platform_type (many more codes for ios than android, e.g. ios: "IN_REVIEW", "READY_FOR_SALE", "REJECTED"; android: "NOT_AVAILABLE", "DRAFT", "IN_PROGRESS", "HALTED", "COMPLETED"). (list of strings, optional)

    • sort: Optional sort field code. Allowed values: 1=Profile Name, 2=Create Date. (number, optional)

    • sort_direction: Optional sort direction code. Allowed values: 1=ASC, 2=DESC. (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_app_version_metadata - Get store listing metadata for a single app version (app review information, localizations, release information, app version information). appReviewInformation.demoPassword is excluded.

    • Access level: read

    • platform_type: Platform type ("ios" or "android"). (string, required)

    • profile_id: The publish profile ID (e.g. UUID). (string, required)

    • app_version_id: The app version ID (e.g. UUID). (string, required)

  • get_metadata_locales - Get the available store metadata locales for a single app version (name, code, localized, isPrimary).

    • Access level: read

    • platform_type: Platform type ("ios" or "android"). (string, required)

    • profile_id: The publish profile ID (e.g. UUID). (string, required)

    • app_version_id: The app version ID (e.g. UUID). (string, required)

  • get_intune_metadata - Get Microsoft Intune app metadata for a single app version (display name, publisher, bundle ID, version, publishing state, applicable device types, categories, etc.).

    • Access level: read

    • platform_type: Platform type ("ios" or "android"). (string, required)

    • profile_id: The publish profile ID (e.g. UUID). (string, required)

    • app_version_id: The app version ID (e.g. UUID). (string, required)

  • get_publish_metadata_lock_status - Get whether a publish profile's store metadata is locked for editing.

    • Access level: read

    • platform_type: Platform type ("ios" or "android"). (string, required)

    • profile_id: The publish profile ID (e.g. UUID). (string, required)

  • get_publish_details - Get the publish flow run details for a single app version (status, timing, ordered steps with run history/artifacts/log resource IDs).

    • Access level: read

    • platform_type: Platform type ("ios" or "android"). (string, required)

    • profile_id: The publish profile ID (e.g. UUID). (string, required)

    • app_version_id: The app version ID (e.g. UUID). (string, required)

  • get_publish_step_logs - Get 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.

    • Access level: read

    • platform_type: Platform type ("ios" or "android"). (string, required)

    • profile_id: The publish profile ID (e.g. UUID). (string, required)

    • publish_id: The publish flow run ID (the "id" field from get_publish_details). (string, required)

    • step_id: The step ID (a step's "id" field from get_publish_details' steps list). (string, required)

    • step: Optional exact step name (case-insensitive) to scope output to one step's log block. (string, optional)

    • full_log: If true, return the entire log instead of the default tail. Still capped at 256 KB. Default: false. (boolean, optional)

    • tail_lines: Number of lines to keep from the end when not using full_log. Default: 200, max 1000. (number, optional)

    • grep: Case-insensitive substring filter applied to lines before truncation. (string, optional)

  • get_publish_flows - Get the publish flows configured for a publish profile (name, ID, full flow document YAML).

    • Access level: read

    • platform_type: Platform type ("ios" or "android"). (string, required)

    • profile_id: The publish profile ID (e.g. UUID). (string, required)

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

    • Access level: write

    • platform_type: Platform type ("ios" or "android"). (string, required)

    • profile_id: The publish profile ID (e.g. UUID). (string, required)

    • publish_id: The publish flow run ID (the "id" field from get_publish_details). (string, required)

    • step_id: Optional step ID to start from that step instead of the beginning of the flow. (string, optional)

    • organization_pool_id: Optional organization pool ID (e.g. UUID) to run on. (string, optional)

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

    • Access level: write

    • platform_type: Platform type ("ios" or "android"). (string, required)

    • profile_id: The publish profile ID (e.g. UUID). (string, required)

    • publish_id: The publish flow run ID (the "id" field from get_publish_details). (string, required)

    • step_id: Optional step ID. (string, optional)

    • organization_pool_id: Optional organization pool ID (e.g. UUID). (string, optional)

  • get_store_profiles - Get enterprise app store profiles for the current organization (paginated). Does not support search, but can filter by platform, publish type, and visibility. Optionally sort.

    • Access level: read

    • page: Page number (1-based). Default: 1. (number, optional)

    • size: Page size (1-100). Default: 25, max 100. (number, optional)

    • platform_type: Optional list of platform codes to filter by. Allowed values: 1=iOS, 2=Android. (list of numbers, optional)

    • publish_type: Optional list of publish type codes to filter by. Allowed values: 1=Published to Beta, 2=Published to Live. (list of numbers, optional)

    • visibility: Optional filter for whether the profile is publicly listed (true=Listed, false=Unlisted). (boolean, optional)

    • sort: Optional sort field code. Allowed values: 1=App Name, 2=Create Date, 3=Download Count, 4=Binary Receive Date. (number, optional)

    • sort_direction: Optional sort direction code. Allowed values: 1=ASC, 2=DESC. (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)

    • Each app version's publishType field is an int: 0=None, 1=Beta, 2=Live.

  • 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_build_queue_waiting_report - Get 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).

    • Access level: read

    • start_date: Optional start date (YYYY-MM-DD). Must be <= end_date if both are given. (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)

  • get_build_activity_log - Get the build activity log (workflow/profile changes, CodePush releases, etc.), optionally filtered by date range and other parameters. Paginated.

    • Access level: read

    • start_date: Optional start date (YYYY-MM-DD). Must be <= end_date if both are given. (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)

    • platform: Filter by platform type (integer code, e.g. 0=Android, 1=iOS). (number, optional)

    • email: Filter by acting user's email. (string, optional)

    • profile_name: Filter by build profile name. (string, optional)

    • action: Filter by activity action code (integer; see BUILD_ACTIVITY_ACTIONS in the tool source for the full mapping). (number, optional)

  • get_build_insights_report - Get 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.

    • Access level: read

    • start_date: Optional start date (YYYY-MM-DD) for the current period. Default: last 30 days. (string, optional)

    • end_date: Optional end date (YYYY-MM-DD) for the current period. (string, optional)

    • sections: Optional list of sections to compute: health_snapshot, root_cause, artifact_health, workflow_quality, queue_time, maturity_assessment. Default: all six. (array of strings, optional)

    • include_sub_orgs: If true, keep cross-org build records in history-derived metrics instead of filtering to the token's own organization. Default: false. (boolean, 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)

  • get_signing_activity_log - Get the signing activity log (e.g. certificate/provisioning profile/keystore expiry notices), optionally filtered by date range and other parameters. Paginated.

    • Access level: read

    • start_date: Optional start date (YYYY-MM-DD). Must be <= end_date if both are given. (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)

    • platform: Filter by platform (e.g. "iOS", "Android"). (string, optional)

    • email: Filter by acting user's email. (string, optional)

    • action: Filter by activity action code (integer; see SIGNING_ACTIVITY_ACTIONS in the tool source for the full mapping). (number, optional)

  • get_publish_activity_log - Get the publish activity log (re-sign, publish flow events, etc.), optionally filtered by date range and other parameters. Paginated.

    • Access level: read

    • start_date: Optional start date (YYYY-MM-DD). Must be <= end_date if both are given. (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)

    • platform: Filter by platform (e.g. "iOS", "Android"). (string, optional)

    • email: Filter by acting user's email. (string, optional)

    • profile_name: Filter by publish profile name. (string, optional)

    • action: Filter by activity action code (integer; see PUBLISH_ACTIVITY_ACTIONS in the tool source for the full mapping). (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": { ... } }
    data is the tool result; meta is 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.

Write/action integration tests (trigger_build, cancel_build, etc.) are marked integration_write and are opt-in on top of APPCIRCLE_ACCESS_TOKEN — they mutate real data (trigger real builds, etc.), so they never run just from pytest test/integration/ -v. Set APPCIRCLE_RUN_WRITE_INTEGRATION_TESTS=true (pointing APPCIRCLE_ACCESS_TOKEN at a dedicated test org, not production) to enable them.

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

Available Tools

25 tools
get_build_configuration_detailsAInspect

Get a single build configuration by profile ID and configuration ID.

Returns the build configuration with the given IDs, including configuration name, platform settings, workflows, signing identities, distribution and publish profile references, and related metadata (item1: configuration object, item2: optional extra).

Args: profile_id: The build profile ID (e.g. UUID). configuration_id: The build configuration ID (e.g. UUID).

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (object with item1: configuration details, item2: optional), meta (empty). - Error: success (false), error (tool, type, message, details).

Examples: Get configuration details: get_build_configuration_details(profile_id="uuid", configuration_id="config-uuid")

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYes
configuration_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must disclose behavioral traits. It describes the return envelope (success/error, data structure) but omits information about authentication, rate limits, or side effects. Since it is a read operation, the risk is low, but more detail would be beneficial.

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 concise and well-structured with Args, Returns, and Examples sections. It is front-loaded with the main purpose and uses clear formatting, earning its sentences without redundancy.

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 tool's simplicity (2 params, simple output), the description is thorough. It covers the return envelope and provides an example. An output schema exists, so repeating return fields is unnecessary. Could mention prerequisites or error conditions, but overall it is sufficiently 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?

Schema coverage is 0%, so the description must add meaning. It explains both parameters (profile_id and configuration_id) with example UUIDs and includes an example call. This adds value beyond the raw schema, though constraints like format or required patterns are not explicitly stated.

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 clearly states the verb 'Get' and the resource 'build configuration', and specifies that it retrieves a single configuration by profile ID and configuration ID. This is specific and sufficiently distinct from sibling tools, even without explicit 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?

The description provides no guidance on when to use this tool versus siblings like get_build_profile_details or get_workflow_detail. There are no use-case scenarios or exclusions, leaving the agent to infer context.

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

get_build_history_reportAInspect

Get build history report, optionally filtered by date range.

Retrieves paginated build history with build metadata, artifacts, duration, status, and optional filters by date range, build profile and organization. Called without start_date and end_date, returns every item in the report.

IMPORTANT: Results are paginated by default to prevent token limit issues. Default page size is 50 items. Use page parameter to retrieve additional results.

Args: start_date: Optional start date (format: "YYYY-MM-DD", e.g., "2024-01-01") end_date: Optional end date (format: "YYYY-MM-DD", e.g., "2024-12-31") page: Page number (starts from 1, default: 1) size: Items per page (1-100, default: 50) build_profile_name: Filter by build profile name organization_id: Filter by organization UUID

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of build history records), meta (count, page, page_size, total_count, total_pages, has_more, next_page, filters). - Error: success (false), error (tool, type, message, details).

Examples: Get all build history (no date filter): get_build_history_report()

Get build history for last month:
    get_build_history_report(
        start_date="2024-11-01",
        end_date="2024-11-30"
    )

Filter by build profile:
    get_build_history_report(
        start_date="2024-01-01",
        end_date="2024-12-31",
        build_profile_name="RN076iOS"
    )

Get second page with custom size:
    get_build_history_report(
        start_date="2024-01-01",
        end_date="2024-12-31",
        page=2,
        size=25
    )
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sizeNo
end_dateNo
start_dateNo
organization_idNo
build_profile_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description fully discloses behavioral traits: pagination (default page size 50), the effect of omitting date filters, and the reason for pagination (token limit issues). It does not mention rate limits or security, but these are not critical for this read operation.

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 well-structured with sections for overview, important notes, args, returns, and examples. It is detailed but not overly verbose; every sentence is informative. Slightly lengthy but justified by the number of parameters.

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

Completeness5/5

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

Given the 6 optional parameters and the existence of an output schema, the description is comprehensive. It covers all parameter details, behavior, pagination, return structure, and provides multiple examples. It is complete enough for an AI agent to invoke correctly.

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

Parameters5/5

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

Schema coverage is 0%, but the description thoroughly explains each parameter's purpose, format (date format 'YYYY-MM-DD'), constraints (page starts at 1, size 1-100, defaults), and provides examples. This adds significant value beyond the bare schema.

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 clearly states the tool's action ('Get build history report'), the resource ('build history'), and its optional filtering by date range. It distinguishes itself from sibling tools that focus on other entities like bundle identifiers or build profiles.

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 on when to use the tool (retrieving build history) and explains default behavior (returns all items without date filters). It also warns about pagination to avoid token limits. However, it does not explicitly mention when not to use it or compare to alternatives.

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

get_build_insights_reportAInspect

Get a computed Build Insights Report over build history: Health Snapshot + Trends, Root Cause, Artifact Health, Workflow Quality, Queue Time, and Maturity Assessment analysis, aggregated server-side.

Unlike get_build_history_report (which returns raw paginated records), this tool fetches every page internally, computes percentiles/grouping/MTTR/flaky detection in Python, and returns only the small aggregated result. Sections that can't be computed from the available data (e.g. a field stripped by an Appcircle role restriction) are omitted rather than rendered as zeros or fabricated, and flagged in meta.omitted_sections / meta.omitted_subsections. Only the current-period build history fetch is mandatory -- every other fetch (previous period, profiles, queue waiting, signing identities, per-profile workflow/trigger/configuration data) is best-effort: a 401/403 from a token lacking permission for that specific resource (e.g. an admin-only endpoint) omits just the dependent section/subsection instead of failing the whole call, and is listed in meta.failed_fetches.

A main-org access token sees build history spanning every sub-organization, but can only enumerate its own org's profiles (the Appcircle API itself enforces this -- not something this tool can fetch around). By default the report is scoped to the token's own organization: build records whose profile isn't in that token's own profile list are excluded before any section is computed, so every section always means the same scope. Set include_sub_orgs=True to keep cross-org records in history-derived metrics (Health Snapshot, Root Cause, Artifact Health, Speed/Reliability) -- Workflow Quality/Discipline/Security for those profiles still can't be resolved (the API limitation doesn't go away), so they're omitted for those specific profiles rather than fabricated, and listed in meta.unresolved_profiles. queue_time has no profile field to scope by, so it's always a tree-wide aggregate regardless of this flag.

Args: start_date: Optional start date (format: "YYYY-MM-DD") for the current period. end_date: Optional end date (format: "YYYY-MM-DD") for the current period. If both start_date and end_date are omitted, defaults to the last 30 days. If only one is given, the other is filled to a 30-day-wide window. sections: Optional list of sections to compute. Subset of ["health_snapshot", "root_cause", "artifact_health", "workflow_quality", "queue_time", "maturity_assessment"]. Defaults to all six. Invalid section names return a validation error. include_sub_orgs: If True, keep cross-org build records in history-derived metrics instead of filtering them to the token's own org (default False). See the note above on what stays unresolved either way.

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (date_range, sections.health_snapshot, sections.root_cause, sections.artifact_health, sections.workflow_quality, sections.queue_time, sections.maturity_assessment), meta (requested_sections, omitted_sections, omitted_subsections, failed_fetches, cross_org_builds_excluded, unresolved_profiles). - Error: success (false), error (tool, type, message, details).

Examples: Full report, last 30 days: get_build_insights_report() Root cause only, custom range: get_build_insights_report( start_date="2026-01-01", end_date="2026-01-31", sections=["root_cause"] ) Include cross-org records from a main-org token: get_build_insights_report(include_sub_orgs=True)

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
sectionsNo
start_dateNo
include_sub_orgsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries full burden and excels. It discloses internal fetching, computation, best-effort behavior for fetches that fail due to permissions, omission of unresolvable sections rather than fabrication, cross-org scoping nuances, and detailed meta fields for omissions and failures. This level of transparency is exemplary.

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 well-structured with a summary, contrast, behavioral notes, Args, Returns, and Examples. It is front-loaded with purpose. However, it is somewhat verbose and could be tightened while retaining completeness.

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

Completeness5/5

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

The description is exceptionally complete for a complex tool, covering input parameters, behavioral nuances (permissions, cross-org, best-effort), output structure with meta fields, and examples. With no output schema provided, the Returns section sufficiently describes the result format.

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

Parameters5/5

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

Given that the input schema has 0% description coverage, the description fully compensates with a detailed Args block explaining each parameter's format, defaults, behavior, and valid enum values (for sections). This adds complete meaning beyond the schema's type information.

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 clearly states it 'Get a computed Build Insights Report over build history' and enumerates the sections computed. It explicitly distinguishes itself from the sibling 'get_build_history_report' which returns raw paginated records, providing clear differentiation.

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?

The description explains when to use this tool versus alternatives, specifically contrasting with get_build_history_report. It also provides detailed guidance on the include_sub_orgs flag, default date ranges, and how sections are handled, giving the agent clear decision criteria.

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

get_build_profile_detailsAInspect

Get a single build profile by ID, optionally including its build configurations.

Returns the build profile with the given ID, including name, platform type, repository information, build status, and optionally the list of configurations (when configurations=True, calls GET /build/v2/profiles/{profileId}/configurations). The returned profile excludes connectionEnvironmentKey and webhookSecret.

Args: profile_id: The build profile ID (e.g. UUID). configurations: If True, also fetch the profile's build configurations and include them in data.configurations. Default: False.

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (build profile object; if configurations=True then data also has a "configurations" key with the list), meta (empty). - Error: success (false), error (tool, type, message, details). Profile object excludes connectionEnvironmentKey and webhookSecret.

Examples: Get details for a profile: get_build_profile_details(profile_id="uuid-here") Get profile with configurations: get_build_profile_details(profile_id="uuid", configurations=True)

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYes
configurationsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

No annotations provided, so description fully covers behavior: it optionally calls another endpoint for configurations, and explicitly states excluded fields (connectionEnvironmentKey, webhookSecret). Return format and error pattern are documented.

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?

Description is well-organized with Args, Returns, and Examples sections. No redundant information; every sentence adds value.

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

Completeness5/5

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

Given the output schema exists, description still provides useful context on return structure and excluded fields. It is complete enough for an agent to use the tool correctly.

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

Parameters5/5

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

Schema coverage is 0%, but the description explains both parameters in detail: profile_id as UUID, configurations as boolean with default False and the effect of including configurations in the response.

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 clearly states the tool returns a single build profile by ID, optionally including configurations. It distinguishes from sibling tools like get_build_profiles (list) and get_build_configuration_details (specific configuration).

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 implies usage for fetching a specific profile, with examples showing typical calls. However, it does not explicitly state when not to use this tool or compare to alternatives.

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

get_build_profilesAInspect

Get build profiles for the current organization (paginated).

Returns a list of build profiles with their IDs, names, platform types, repository information, build status, and configuration details. Optionally filter by profile name using the search parameter.

Args: page: Page number (1-based). Default: 1. size: Page size (1-100). Default: 25. Values above 100 are capped at 100. search: Optional search term to filter profiles by name (case-insensitive partial match). For example, search="iOS" will return profiles with "iOS" in their name.

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of build profile objects), meta (count, page, page_size, search_term). - Error: success (false), error (tool, type, message, details). Profile objects exclude connectionEnvironmentKey and webhookSecret.

Examples: Get first page (default size 25): get_build_profiles() Get page 2 with 10 items: get_build_profiles(page=2, size=10) Search for iOS profiles: get_build_profiles(search="iOS")

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sizeNo
searchNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries full burden and thoroughly discloses behavior: pagination details, search capabilities, return fields (with exclusions), and error handling. It is transparent about being a read-only listing with no side effects.

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 well-structured with a summary, parameter details (Args block), return info, and examples. It is appropriately detailed given the lack of schema coverage, though slightly verbose with redundant list-style parameter descriptions.

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

Completeness5/5

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

Given the output schema exists, the description complements it well by mentioning excluded fields, pagination metadata, and error envelope. It covers all aspects needed for an agent to use the tool correctly.

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

Parameters5/5

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

Schema coverage is 0%, so description compensates fully. It explains page (1-based, default 1), size (default 25, capped at 100), and search (case-insensitive partial match with examples), adding significant meaning beyond the schema's type/default info.

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 clearly states 'Get build profiles for the current organization (paginated)', using a specific verb and resource. It distinguishes itself from siblings like get_build_profile_details by focusing on listing with pagination and optional search.

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 implies usage through examples and parameter descriptions, but does not explicitly state when to use this tool vs alternatives like get_build_profile_details or get_distribution_profiles. The context is clear but lacks exclusion guidance.

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

get_build_profile_workflowsAInspect

Get workflows for a build profile by profile ID.

Returns the list of workflows associated with the given build profile, including workflow id, name, and last used time.

Args: profile_id: The build profile ID (e.g. UUID).

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of workflow objects), meta (count). - Error: success (false), error (tool, type, message, details).

Examples: Get workflows for a profile: get_build_profile_workflows(profile_id="uuid-here")

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/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. It fully discloses the read-only behavior, parameter requirements, return structure (standard envelope with success/error), and even includes an example. No side effects or hidden traits.

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 concise and well-structured: first sentence states purpose, then separate sections for args, returns, and examples. Every sentence adds value, and it is front-loaded with the key action.

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

Completeness5/5

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

Given the tool has one parameter and an output schema (mentioned in context), the description covers usage, parameter semantics, return format, error handling, and an example. It is fully complete for a retrieval 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?

Schema coverage is 0%, but the description explicitly explains the profile_id parameter as 'The build profile ID (e.g. UUID)', adding meaning beyond the schema's type and title. This compensates well for the lack of schema descriptions.

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 explicitly states 'Get workflows for a build profile by profile ID', a specific verb+resource. It lists the returned fields (id, name, last used time), clearly distinguishing it from siblings like get_build_profile_details or get_workflow_detail.

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 (by profile ID) and an example usage. However, it does not explicitly mention when not to use or suggest alternatives among the many sibling tools, so it stops short of a 5.

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

get_bundle_identifiersAInspect

Get all bundle identifiers for the organization.

Returns the list of bundle identifiers (iOS/macOS app bundle IDs) registered in Appcircle, including id, name, identifier, platform, capabilities, and related metadata.

Takes no parameters.

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of bundle identifier objects), meta (count). - Error: success (false), error (tool, type, message, details).

Examples: Get all bundle identifiers: get_bundle_identifiers()

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/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. It details the return structure, includes an example, and describes the data fields. It is transparent about being a read-only operation.

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 concise, well-structured with a summary, return details, and an example. Every sentence is informative and earns its place.

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

Completeness5/5

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

Given no parameters and an output schema (referenced via standard envelope), the description is complete. It sufficiently explains the tool's behavior and return format.

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

Parameters5/5

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

The description explicitly states no parameters are needed, which adds meaning since the schema is empty. For a parameterless tool, this is excellent clarity.

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 clearly states it retrieves all bundle identifiers for the organization and lists the returned fields. It distinguishes itself from sibling tools by being a simple, parameterless list operation.

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 states it takes no parameters and returns all bundle identifiers, but does not explicitly guide when to use this tool versus siblings. However, the context of 'all' versus filtered tools is implied.

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

get_certificatesAInspect

Get all signing certificates for the organization.

Returns the list of signing certificates (e.g. distribution/development) registered in Appcircle. Sensitive fields (p12Password, p12Binary, metaData, thumbprint) are omitted from the response.

Takes no parameters.

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of certificate objects), meta (count). - Error: success (false), error (tool, type, message, details).

Examples: Get all certificates: get_certificates()

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: it takes no parameters, omits sensitive fields (p12Password, etc.), and returns a standard envelope with success/error formats.

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 concise (two short paragraphs), front-loaded with the main purpose, and uses clear structure including examples.

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

Completeness5/5

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

For a zero-parameter, read-only tool with an existing output schema, the description covers all necessary context: authentication, return structure, and omission of sensitive fields.

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?

No parameters exist, so baseline 4. Description correctly states 'Takes no parameters.' This is adequate.

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 clearly states 'Get all signing certificates for the organization.' and specifies it returns a list of signing certificates, distinguishing it from siblings that deal with bundle identifiers, build profiles, etc.

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 implies when to use (to retrieve signing certificates) but does not explicitly state when not to use or provide alternatives. Given the sibling context, it's clear but not explicitly guided.

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

get_commit_detailsAInspect

Get a single commit by commit ID (UUID) or by commit hash (git SHA).

Returns the commit with the given identifier, including hash, message, author, email, commit date, tags, and associated builds (with status, failed step, duration, artifacts, etc.). Provide either commit_id or commit_hash, not both.

Args: commit_id: The commit ID (UUID). Use when you have the commit's unique ID. commit_hash: The commit hash (git SHA, e.g. 40-char hex). Use when you have the repository commit hash.

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (commit object with id, organizationId, profileId, branchId, hash, message, author, email, commitDate, tags, builds, targetBranchId, pullNumber, commitStatus, description, etc.), meta (empty). - Error: success (false), error (tool, type, message, details).

Examples: Get by commit ID: get_commit_details(commit_id="f4e4d8f9-ae28-4e82-a7bd-5e02338c2260") Get by commit hash: get_commit_details(commit_hash="15d2bb0bac20cd8a564d4dbdf7bf2948321f7908")

ParametersJSON Schema
NameRequiredDescriptionDefault
commit_idNo
commit_hashNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided, so the description carries the full burden. It details the return structure (standard envelope with success/error, commit fields) and implies read-only behavior. It does not disclose authentication or rate limit details, but these are acceptable for a simple retrieval tool.

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?

Well-structured with a clear one-line purpose, parameter descriptions, return explanation, and examples. Slightly verbose with the 'Args' and 'Returns' sections, but every part contributes value.

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

Completeness5/5

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

Despite lacking output schema details in the structured data, the description manually enumerates return fields and provides examples. It covers the essential behavioral and semantic aspects for an agent to use the tool correctly.

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

Parameters5/5

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

Schema coverage is 0%, so description must compensate. It adds concrete meaning: commit_id is a UUID, commit_hash is a 40-character git SHA. It also states the usage context for each parameter, significantly aiding schema understanding.

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?

Clearly states the tool retrieves a single commit by either commit ID (UUID) or commit hash (git SHA). This specific verb-resource combination distinguishes it from siblings like get_commits_by_branch.

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?

Explicitly instructs to provide only one of commit_id or commit_hash, not both, and explains when to use each. However, it does not mention scenarios where the tool should not be used or suggest alternatives beyond the sibling list.

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

get_commits_by_branchAInspect

Get commits for a build branch (paginated).

Returns a list of commits for the given branch ID, including commit hash, message, author, commit date, tags, and associated builds. When page and size are provided, the API returns pagination metadata (page, perPage, pageCount, totalCount, enablePrevious, enableNext) which is included in meta.

Args: branch_id: The branch ID (e.g. UUID). page: Page number (1-based). If provided with size, enables pagination and returns pagination metadata in meta. Default when using pagination: 1. size: Page size. If provided with page, enables pagination. Default when using pagination: 25. Values above 100 are capped at 100.

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of commit objects with id, hash, message, author, email, commitDate, tags, builds, etc.), meta (when pagination used: page, page_size, page_count, total_count, enable_previous, enable_next; otherwise empty or minimal). - Error: success (false), error (tool, type, message, details).

Examples: Get commits (no pagination): get_commits_by_branch(branch_id="branch-uuid") Get first page of commits: get_commits_by_branch(branch_id="branch-uuid", page=1, size=25) Get page 2 with 10 items: get_commits_by_branch(branch_id="branch-uuid", page=2, size=10)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sizeNo
branch_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: pagination metadata in meta, default values, value cap at 100, standard return envelope format. No contradictions.

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?

Well-structured with summary, Args, Returns, and Examples sections. Comprehensive but slightly lengthy; could be trimmed slightly while retaining all information.

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

Completeness5/5

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

Complete for a paginated list tool with output schema. Covers all parameters, return format, and examples. No gaps for agent usage.

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

Parameters5/5

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

Adds significant meaning beyond bare schema: branch_id as UUID, page as 1-based with default and pagination behavior, size with default and cap. Schema coverage was 0%, so description compensates fully.

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?

Clearly states 'Get commits for a build branch' and specifies return fields (hash, message, author, etc.). Distinguishes from sibling tools like get_commit_details which likely returns a single commit.

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?

Provides detailed usage context: pagination is enabled when both page and size are provided, default values, and value caps. Includes examples. However, it does not explicitly mention when to use this tool over alternatives like get_commit_details.

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

get_distribution_app_version_reportAInspect

Get daily usage report for distributed app versions.

Retrieves paginated daily usage data for app versions distributed via distribution profiles. Called without start_date and end_date, returns every item in the report. Supports filtering by profile, OS, and organization.

IMPORTANT: Results are paginated by default to prevent token limit issues. Default page size is 50 items. Use page parameter to retrieve additional results.

Args: start_date: Optional start date (format: "YYYY-MM-DD", e.g., "2024-01-01") end_date: Optional end date (format: "YYYY-MM-DD", e.g., "2024-12-31") page: Page number (starts from 1, default: 1) size: Items per page (1-100, default: 50) profile_name: Filter by distribution profile name os: Filter by OS ("ios" or "android") organization_id: Filter by organization UUID

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of daily usage records), meta (count, page, page_size, total_count, total_pages, has_more, next_page, filters). - Error: success (false), error (tool, type, message, details).

Examples: Get all distribution app version report (no date filter): get_distribution_app_version_report()

Get report for last month:
    get_distribution_app_version_report(
        start_date="2024-11-01",
        end_date="2024-11-30"
    )

Filter by profile and OS:
    get_distribution_app_version_report(
        start_date="2024-01-01",
        end_date="2024-12-31",
        profile_name="Internal Testing",
        os="ios"
    )
ParametersJSON Schema
NameRequiredDescriptionDefault
osNo
pageNo
sizeNo
end_dateNo
start_dateNo
profile_nameNo
organization_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. Describes pagination behavior, default page size, token limit concerns, and return format (standard envelope). Does not mention any destructive actions or side effects, which is appropriate for a read-only report tool. Some additional details like date format examples enhance transparency.

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?

Well-structured with summary, details, args, returns, and examples. Every section adds value. A bit verbose, but clarity outweighs conciseness. Could potentially shorten the examples, but overall efficient.

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

Completeness5/5

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

Given 7 parameters, pagination, and multiple filters, the description covers all necessary aspects: default behavior, pagination mechanics, parameter details, return format reference. Existence of an output schema (standard envelope) means return values are handled separately. Agent has full context to invoke correctly.

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

Parameters5/5

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

Schema has 0% description coverage, so description must compensate. It includes an 'Args:' section with descriptions, types, formats, defaults, and examples for all 7 parameters. This adds substantial meaning beyond schema, such as date format, default page size, and filter semantics.

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?

Starts with a clear verb+resource: 'Get daily usage report for distributed app versions.' The description further specifies it retrieves paginated daily usage data, making the purpose unambiguous. It does not explicitly distinguish from siblings, but the resource is unique enough among sibling tools.

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?

Provides usage context: behavior without start/end dates returns all items, supports filtering by profile, OS, organization. However, it lacks explicit when-to-use vs. alternatives or when-not-to-use. The sibling list contains many 'get_*' tools, but no clear differentiation is stated.

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

get_distribution_profile_detailsAInspect

Get a single testing distribution profile by ID (with optional app versions pagination).

Returns the distribution profile with the given ID, including name, settings, and a paginated list of app versions. Use page and size to paginate app versions. The returned profile excludes settings.password.

Args: profile_id: The distribution profile ID (e.g. UUID). page: Page number for app versions (1-based). Default: 1. size: Page size for app versions (1-100). Default: 25. Values above 100 are capped at 100.

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (single distribution profile object with appVersions), meta (app-versions pagination). - Error: success (false), error (tool, type, message, details). Profile object excludes settings.password. Meta contains page, page_size, total_count, etc.

Examples: Get profile details: get_distribution_profile_details(profile_id="uuid-here") Get first page of app versions (5 per page): get_distribution_profile_details(profile_id="uuid", page=1, size=5)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sizeNo
profile_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It accurately discloses that the return excludes settings.password, includes pagination for app versions, and provides error envelope structure. However, it does not explicitly state read-only nature (though implied) or authorization needs.

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 well-organized into sections: purpose, returns, args, examples. Every sentence provides necessary information without verbosity. It is appropriately sized for the tool's complexity.

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

Completeness5/5

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

The description covers purpose, parameters, return format including pagination, and provides usage examples. Given the presence of an output schema, it does not need to explain return fields in detail. It is complete for a detail retrieval tool.

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

Parameters5/5

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

The description fully explains each parameter: profile_id as a UUID, page as 1-based integer defaulting to 1, size as 1-100 capped at 100 with default 25. This adds significant value beyond the schema, which had 0% description coverage.

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 clearly states it gets a single testing distribution profile by ID with optional app versions pagination. The verb 'Get' and resource 'distribution profile' are specific, and it distinguishes from sibling list tool 'get_distribution_profiles' by focusing on a single profile with details.

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 implies usage via the 'Get a single ...' phrasing, but it does not explicitly state when to use this tool over alternatives like 'get_distribution_profiles'. No when-not or alternative guidance is provided.

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

get_distribution_profilesAInspect

Get testing distribution profiles for the current organization (paginated).

Returns a list of distribution profiles with their IDs, names, iOS and Android app versions, settings details, and testing group information. Optionally filter by profile name using the search parameter.

Args: page: Page number (1-based). Default: 1. size: Page size (1-100). Default: 25. Values above 100 are capped at 100. search: Optional search term to filter profiles by name (case-insensitive partial match). For example, search="iOS" will return profiles with "iOS" in their name.

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of distribution profile objects), meta (count, page, page_size, search_term). - Error: success (false), error (tool, type, message, details). Profile objects exclude settings.password.

Examples: Get first page (default size 25): get_distribution_profiles() Get page 2 with 10 items: get_distribution_profiles(page=2, size=10) Search for iOS profiles: get_distribution_profiles(search="iOS")

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sizeNo
searchNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, description carries full burden. It discloses pagination, search filtering, default values, capping behavior, exclusion of sensitive data (password), and return envelope structure. Does not mention authorization or rate limits, but is transparent for a read-only tool.

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?

Description is well-structured: summary, return content, parameter details, return envelope, and examples. Every sentence adds value, though could be slightly more concise. Front-loaded purpose helps quick understanding.

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

Completeness5/5

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

Given the tool's complexity (3 optional parameters, no enums, output schema exists), description covers all aspects: parameter explanations, behavior constraints, return format, and examples. Includes privacy note about password exclusion. Complete for a paginated list tool.

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

Parameters5/5

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

Schema has no descriptions (0% coverage), but description explains each parameter: page (1-based, default 1), size (range 1-100, capped), search (case-insensitive partial match with example). These details add critical meaning beyond the schema.

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?

Description clearly states the verb 'Get' and resource 'testing distribution profiles for the current organization (paginated)'. It specifies the returned fields (IDs, names, versions, etc.) and the optional filter, distinguishing it from sibling tools like 'get_build_profiles' or 'get_store_profiles'.

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?

Description explains the purpose and optional search parameter, but does not explicitly state when to use this tool versus alternatives or provide 'when not to use' guidance. Examples show typical usage, but no sibling comparison.

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

get_distribution_sent_reportAInspect

Get daily usage report for distributed app sharing.

Retrieves paginated daily usage data for app sharing (distribute-sent) via distribution profiles. Called without start_date and end_date, returns every item in the report. Supports filtering by profile, OS, and organization.

IMPORTANT: Results are paginated by default to prevent token limit issues. Default page size is 50 items. Use page parameter to retrieve additional results.

Args: start_date: Optional start date (format: "YYYY-MM-DD", e.g., "2024-01-01") end_date: Optional end date (format: "YYYY-MM-DD", e.g., "2024-12-31") page: Page number (starts from 1, default: 1) size: Items per page (1-100, default: 50) profile_name: Filter by distribution profile name os: Filter by OS ("ios" or "android") organization_id: Filter by organization UUID

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of daily usage records), meta (count, page, page_size, total_count, total_pages, has_more, next_page, filters). - Error: success (false), error (tool, type, message, details).

Examples: Get all distribution sent report (no date filter): get_distribution_sent_report()

Get report for last month:
    get_distribution_sent_report(
        start_date="2024-11-01",
        end_date="2024-11-30"
    )

Filter by profile and OS:
    get_distribution_sent_report(
        start_date="2024-01-01",
        end_date="2024-12-31",
        profile_name="Internal Testing",
        os="ios"
    )
ParametersJSON Schema
NameRequiredDescriptionDefault
osNo
pageNo
sizeNo
end_dateNo
start_dateNo
profile_nameNo
organization_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Since no annotations are provided, the description carries full burden. It discloses that results are paginated by default with a default size of 50, and explains how to navigate pagination. It also specifies the return envelope structure. This is thorough for a read-only report retrieval tool.

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 well-structured with a brief intro, an Args section, a Returns section, and Examples. It is slightly long but every section adds value. The most important information (purpose and pagination) is front-loaded.

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

Completeness5/5

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

Given the tool has 7 parameters, no annotations, and an output schema exists, the description covers all necessary aspects: purpose, all parameters with formats and defaults, pagination behavior, return structure, and usage examples. It is fully complete for effective tool selection and invocation.

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

Parameters5/5

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

With 0% schema coverage, the description adds extensive meaning: it provides formats, examples, defaults, and explanations for all 7 parameters. It clarifies that start_date/end_date are optional and how they affect results, and explains filtering options like profile_name, os, and organization_id.

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 explicitly states it retrieves a 'daily usage report for distributed app sharing', with a clear verb ('Get') and resource ('daily usage report'). It distinguishes itself from sibling tools like get_build_history_report by focusing on app sharing distribution data.

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 explains when to use the tool (to get paginated daily usage data) and provides multiple examples showing different call patterns. It does not explicitly state when not to use it or mention alternatives, but the examples and parameter descriptions give clear guidance.

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

get_enterprise_app_store_app_usage_reportAInspect

Get app usage report for enterprise app store.

Retrieves paginated daily app usage data for the enterprise app store. start_date and end_date are required. Supports optional filter by organization.

IMPORTANT: Results are paginated by default to prevent token limit issues. Default page size is 50 items. Use page parameter to retrieve additional results.

Args: start_date: Start date (format: "YYYY-MM-DD", e.g., "2024-01-01") end_date: End date (format: "YYYY-MM-DD", e.g., "2024-12-31") page: Page number (starts from 1, default: 1) size: Items per page (1-100, default: 50) organization_id: Optional filter by organization UUID

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of app usage records), meta (count, page, page_size, total_count, total_pages, has_more, next_page, filters). - Error: success (false), error (tool, type, message, details).

Examples: Get app usage for last month: get_enterprise_app_store_app_usage_report( start_date="2024-11-01", end_date="2024-11-30" )

Filter by organization:
    get_enterprise_app_store_app_usage_report(
        start_date="2024-01-01",
        end_date="2024-12-31",
        organization_id="49ddc35d-85e8-4898-a4f7-496b63660db4"
    )
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sizeNo
end_dateYes
start_dateYes
organization_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses pagination behavior: 'Results are paginated by default to prevent token limit issues. Default page size is 50 items. Use page parameter to retrieve additional results.' It also details the return structure (Standard envelope with success/data/meta/error). This provides good transparency beyond basic read-only implied by 'get'.

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 well-structured with a brief opening line, a second line summarizing function, then bullet-like list of parameters, returns, and examples. It is appropriately sized for the complexity and front-loads the purpose. The examples add clarity without excessive verbosity.

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

Completeness5/5

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

Given 5 parameters (2 required), pagination, and reference to external output schema, the description covers all essential aspects: date format, pagination mechanism, optional filter, return structure, and examples. It is complete for an agent to correctly invoke the tool.

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

Parameters5/5

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

Schema coverage is 0%, so description must explain all 5 parameters. It does: start_date/end_date with format and examples, page/size with defaults and ranges, organization_id as optional filter. Examples demonstrate usage. This fully compensates for lack of schema descriptions.

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 clearly states the verb 'Get' and resource 'app usage report for enterprise app store' in the first sentence, then elaborates 'Retrieves paginated daily app usage data for the enterprise app store.' This distinguishes it from sibling tools like get_build_history_report by specifying the enterprise app store context.

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 does not explicitly state when to use this tool versus alternatives. It mentions required parameters (start_date, end_date) and optional organization filter, but lacks guidance on situations where this tool is preferred over others. No exclusions or when-not-to-use are provided.

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

get_keystoresAInspect

Get all keystores for the organization.

Returns the list of keystores (e.g. Android signing keystores) registered in Appcircle. Sensitive fields (password, aliasPassword, binary, checkSum, sha256FingerPrint) are omitted from the response.

Takes no parameters.

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of keystore objects), meta (count). - Error: success (false), error (tool, type, message, details).

Examples: Get all keystores: get_keystores()

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, so the description carries the full burden. It discloses that sensitive fields are omitted and describes the return envelope. It is a read-only operation, which is implicit.

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 brief, front-loaded with the purpose, and includes the return format and an example. Every sentence adds value without redundancy.

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 no parameters and the presence of an output schema, the description is adequately complete. It explains what is returned and omitted. A mention of read-only nature would improve it.

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?

No parameters exist (schema has 0 properties). The description correctly states 'Takes no parameters.' The baseline is 4 for zero-parameter tools.

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 clearly states the action ('Get all keystores') and the resource ('for the organization'). It distinguishes from sibling tools by naming the specific resource (keystores).

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 lacks explicit guidance on when to use this tool versus alternatives. It only describes what it does, without stating when not to use it or suggesting other tools.

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

get_provisioning_profilesAInspect

Get provisioning profiles for the organization.

Returns the list of provisioning profiles (e.g. iOS/macOS) registered in Appcircle. Sensitive/large fields (binary, metaData, certificateThumbPrints, provisionedDevices, connectApiKeyId) are omitted from the response. Optionally filter by app (bundle) ID.

Args: app_id: Optional app (bundle) ID to filter provisioning profiles (e.g. com.example.app).

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of provisioning profile objects), meta (count, filters). - Error: success (false), error (tool, type, message, details).

Examples: Get all provisioning profiles: get_provisioning_profiles() Filter by app: get_provisioning_profiles(app_id="com.example.myapp")

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/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 full burden of behavioral disclosure. It explicitly mentions that sensitive/large fields (binary, metaData, certificateThumbPrints, provisionedDevices, connectApiKeyId) are omitted from the response, and describes the return format. This adds significant transparency beyond basic read operation knowledge.

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 well-structured with sections for Args, Returns, and Examples. It is concise yet informative, front-loading the main purpose and then providing details. Every sentence adds value.

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

Completeness5/5

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

Given the single optional parameter, the lack of annotations, and the presence of an output schema, the description is comprehensive. It covers purpose, filtering, omitted fields, return format, and provides examples, leaving no significant gaps.

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 has 0% description coverage, so the description compensates by explaining the app_id parameter: 'Optional app (bundle) ID to filter provisioning profiles (e.g., com.example.app).' This adds meaning beyond the type definition.

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 clearly states the tool's purpose: to get provisioning profiles for the organization, with optional filtering by app ID. It uses specific verb+resource and distinguishes from siblings which target other entities like bundle identifiers, build profiles, etc.

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 explains when to use the tool (to retrieve provisioning profiles) and provides filtering guidance via the app_id parameter. It doesn't explicitly state when not to use it, but sibling tool names imply different resource types, making usage context clear.

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

get_publish_profile_detailsAInspect

Get a single publish profile by platform type and ID (with optional app versions pagination).

Returns the publish profile with the given ID for the given platform, including name, configuration, and a paginated list of app versions. Use page and size to paginate app versions. The returned profile and each app version exclude signedCertThumbPrint.

Args: platform_type: Platform type ("ios" or "android"). profile_id: The publish profile ID (e.g. UUID). page: Page number for app versions (1-based). Default: 1. size: Page size for app versions (1-100). Default: 25. Values above 100 are capped at 100.

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (single publish profile object with appVersions), meta (app-versions pagination, platform_type). - Error: success (false), error (tool, type, message, details). Profile and app versions exclude signedCertThumbPrint.

Examples: Get profile details: get_publish_profile_details(platform_type="ios", profile_id="uuid-here") Get first page of app versions (5 per page): get_publish_profile_details(platform_type="ios", profile_id="uuid", page=1, size=5)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sizeNo
profile_idYes
platform_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

No annotations provided, but the description fully discloses behavior: it is a read operation, returns profile data excluding signedCertThumbPrint, and details error response format. No contradiction.

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?

Well-structured with first sentence giving purpose, followed by structured Args, Returns, and Examples. Slightly redundant (mentions signedCertThumbPrint exclusion twice), but overall clear and efficient.

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

Completeness5/5

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

Given the tool's complexity (4 params, pagination, output schema exists), the description covers all necessary aspects: parameter details, return envelope, error handling, and examples. References external docs for standard envelope.

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

Parameters5/5

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

Schema coverage is 0%, but the description provides comprehensive meanings for all 4 parameters: platform_type (enum), profile_id (UUID), page and size with defaults and capping. This adds significant value beyond the schema.

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?

Clearly states it gets a single publish profile by platform type and ID, with optional app versions pagination. Distinguishes from sibling get_publish_profiles (which would list all).

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?

Explains when to use (get specific profile by ID and platform) and includes pagination guidance. However, it does not explicitly state when not to use or list alternatives.

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

get_publish_profilesAInspect

Get publish profiles for the current organization for a given platform type (paginated).

Returns a list of publish profiles with their IDs, names, app versions, version information, flow status information, and profile settings. Optionally filter by flow status.

Args: platform_type: Platform type of publish profiles ("ios" or "android"). page: Page number (1-based). Default: 1. size: Page size (1-100). Default: 25. Values above 100 are capped at 100. flow_status: Optional flow status code to filter by (single value). Allowed values: 0=Success, 1=Failed, 2=Canceled, 3=Timeout, 90=Waiting, 91=Running, 92=Completing, 99=Unknown, 200=NotStarted, 201=Stopped, 202=InProgress, 203=AwaitingResponse.

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of publish profile objects), meta (page, page_size, platform_type, flow_status, pagination metadata). - Error: success (false), error (tool, type, message, details).

Examples: Get first page of iOS profiles: get_publish_profiles(platform_type="ios") Get page 2 with 10 items: get_publish_profiles(platform_type="android", page=2, size=10) Filter by flow status: get_publish_profiles(platform_type="ios", flow_status=0)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sizeNo
flow_statusNo
platform_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries full burden. It discloses behavioral traits like pagination, filtering, default parameter values, and capping. It does not mention side effects or authorization, but as a read-only tool, this is acceptable. A score of 5 would require explicit statements about non-destructiveness or rate limits.

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 well-structured with Args, Returns, and Examples sections, making it easy to parse. It is comprehensive but slightly verbose; some information (e.g., full list of return fields) could be shortened given the output schema. Still, it earns its length.

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

Completeness5/5

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

Given the presence of an output schema, the description need not fully explain return values, but it does. It covers pagination metadata, filtering, and provides multiple examples. For a tool with 4 parameters and complex pagination, this is thorough and complete.

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

Parameters5/5

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

Schema coverage is 0%, so the description adds all parameter meaning. It explains platform_type as an enum, page as 1-based, size bounds (1-100 capped at 100), and flow_status with allowed integer codes. It provides default values and behavior, significantly enhancing understanding beyond the raw schema.

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 explicitly states 'Get publish profiles for the current organization for a given platform type (paginated)', clearly indicating the action, resource, and scope. It distinguishes from sibling tools like get_publish_profile_details (singular) and other profile-related 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 description provides clear context for usage: 'for a given platform type' and pagination details. Examples show typical use cases. However, it does not explicitly compare to alternatives or state when not to use this tool, which would elevate it to a 5.

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

get_publish_resign_reportAInspect

Get publish resign report, optionally filtered by date range and other parameters.

Retrieves paginated publish resign data. Called without start_date and end_date, returns every item in the report. Supports filtering by app name, organization, and status.

IMPORTANT: Results are paginated by default to prevent token limit issues. Default page size is 50 items. Use page parameter to retrieve additional results.

Args: start_date: Optional start date (format: "YYYY-MM-DD", e.g., "2024-01-01") end_date: Optional end date (format: "YYYY-MM-DD", e.g., "2024-12-31") page: Page number (starts from 1, default: 1) size: Items per page (1-100, default: 50) app_name: Filter by app name organization_id: Filter by organization UUID status: Filter by resign status. Allowed: 0=waiting, 1=processing, 2=succeeded, 3=failed, 4=cancelled, 5=timeout

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of publish resign records), meta (count, page, page_size, total_count, total_pages, has_more, next_page, filters). - Error: success (false), error (tool, type, message, details).

Examples: Get all publish resign report (no date filter): get_publish_resign_report()

Get report for last month:
    get_publish_resign_report(
        start_date="2024-11-01",
        end_date="2024-11-30"
    )

Filter by status (succeeded only):
    get_publish_resign_report(
        start_date="2024-01-01",
        end_date="2024-12-31",
        status=2
    )
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sizeNo
statusNo
app_nameNo
end_dateNo
start_dateNo
organization_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description must disclose behavioral traits. It does so by detailing pagination behavior, default page size, filter effects, and the response envelope structure. It does not mention any side effects or permissions, but as a read-only report retrieval, the transparency is adequate.

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 well-structured with sections (intro, args, returns, examples) and uses clear language. It is somewhat verbose (e.g., repeated mention of pagination), but every sentence provides value. The structure aids readability.

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 presence of an output schema (external), the description covers the key usage aspects: pagination, filtering, and response envelope. It includes examples for common cases (no filters, date range, status filter). It does not explain edge cases or behavior with invalid parameters, but overall it is sufficient for correct invocation.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden. It provides clear descriptions for all 7 parameters, including format examples for dates, allowed integer values for status (with mapping), and pagination parameters (page, size). This adds significant meaning beyond the bare schema.

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 clearly identifies the tool as retrieving a publish resign report with optional filters. It states the resource ('publish resign report') and action ('get'). However, it does not explicitly distinguish this report from sibling report tools (e.g., get_build_history_report), leaving the agent to infer when to use this specific report.

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 provides guidance on parameter usage and pagination, including examples for different scenarios. However, it lacks explicit instructions on when to choose this tool over alternatives among the many sibling report tools. No 'when not to use' or prerequisite conditions are stated.

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

get_publish_status_reportAInspect

Get publish status report, optionally filtered by date range and other parameters.

Retrieves paginated publish status data. Called without start_date and end_date, returns every item in the report. Supports filtering by app name, organization, and status.

IMPORTANT: Results are paginated by default to prevent token limit issues. Default page size is 50 items. Use page parameter to retrieve additional results.

Args: start_date: Optional start date (format: "YYYY-MM-DD", e.g., "2024-01-01") end_date: Optional end date (format: "YYYY-MM-DD", e.g., "2024-12-31") page: Page number (starts from 1, default: 1) size: Items per page (1-100, default: 50) app_name: Filter by app name organization_id: Filter by organization UUID status: Filter by publish status. Allowed: 0=Success, 1=Failed, 2=Canceled, 3=Timeout, 90=Waiting, 91=Running, 92=Completing, 99=Unknown, 200=NotStarted, 201=Stopped, 202=InProgress, 203=AwaitingResponse

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of publish status records), meta (count, page, page_size, total_count, total_pages, has_more, next_page, filters). - Error: success (false), error (tool, type, message, details).

Examples: Get all publish status report (no date filter): get_publish_status_report()

Get report for last month:
    get_publish_status_report(
        start_date="2024-11-01",
        end_date="2024-11-30"
    )

Filter by status (success only):
    get_publish_status_report(
        start_date="2024-01-01",
        end_date="2024-12-31",
        status=0
    )
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sizeNo
statusNo
app_nameNo
end_dateNo
start_dateNo
organization_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. Discloses pagination, default page size, date range behavior, status codes, and return envelope structure. Lacks mention of auth or rate limits, but adequate.

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?

Well-structured with distinct sections for purpose, args, returns, and examples. Each sentence adds value; no redundancy.

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?

Covers all parameters, return envelope, and includes examples. No missing essential details given the presence of output schema. Could mention sibling tools but not required for basic usage.

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

Parameters5/5

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

Schema has 0% description coverage; the description provides full parameter details including formats, defaults, allowed values (status codes), and examples, adding significant meaning beyond the schema alone.

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 clearly states the tool retrieves a 'publish status report' with optional filtering. It does not explicitly differentiate from sibling get_* tools, but the resource name is specific enough.

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 explains when to use (retrieve report, filter) and behavior without filters, but does not guide against using it for other reports or mention alternatives among siblings.

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

get_signing_reportAInspect

Get signing report, optionally filtered by date range and other parameters.

Retrieves paginated signing report data. Called without start_date and end_date, returns every item in the report. Supports filtering by organization, OS, and build status.

IMPORTANT: Results are paginated by default to prevent token limit issues. Default page size is 50 items. Use page parameter to retrieve additional results.

Args: start_date: Optional start date (format: "YYYY-MM-DD", e.g., "2024-01-01") end_date: Optional end date (format: "YYYY-MM-DD", e.g., "2024-12-31") page: Page number (starts from 1, default: 1) size: Items per page (1-100, default: 50) organization_id: Filter by organization UUID os: Filter by OS ("ios" or "android") build_status: Filter by build status. Allowed: 0=Success, 1=Failed, 2=Canceled, 3=Timeout, 90=Waiting, 91=Running, 92=Completing, 99=Unknown

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of signing report records), meta (count, page, page_size, total_count, total_pages, has_more, next_page, filters). - Error: success (false), error (tool, type, message, details).

Examples: Get all signing report (no date filter): get_signing_report()

Get signing report for last month:
    get_signing_report(
        start_date="2024-11-01",
        end_date="2024-11-30"
    )

Filter by OS and build status:
    get_signing_report(
        start_date="2024-01-01",
        end_date="2024-12-31",
        os="ios",
        build_status=0
    )
ParametersJSON Schema
NameRequiredDescriptionDefault
osNo
pageNo
sizeNo
end_dateNo
start_dateNo
build_statusNo
organization_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

The description discloses pagination behavior (default size=50, use page), date range handling, filtering by organization/OS/build status, and references the return envelope. Examples illustrate behavior. No annotations exist, so burden is fully met.

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 well-structured with sections (general, important note, args, returns, examples), front-loaded with purpose, and every sentence adds value. No wasted text.

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

Completeness5/5

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

Given 7 parameters, no required ones, and an output schema reference, the description covers all aspects: purpose, filters, pagination, return format, and examples. It is fully self-contained for agent decision-making.

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

Parameters5/5

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

Schema coverage is 0%, but the description compensates fully with a detailed 'Args:' section: includes format for dates, allowed values for os, build_status numeric mapping, and page/size defaults. This adds essential meaning beyond the schema.

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 clearly identifies the verb 'Get' and resource 'signing report', with 'optionally filtered by date range and other parameters' adding specificity. It distinguishes from sibling tools by focusing on the signing report aggregation.

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 explains when to call without filters ('returns every item') and lists supported filters, providing clear context. However, it does not explicitly mention when not to use or provide alternatives.

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

get_store_profile_detailsAInspect

Get a single enterprise app store profile by ID (with optional app versions pagination).

Returns the enterprise app store profile with the given ID, including name, configuration, and a paginated list of app versions. Use page and size to paginate app versions. The returned profile and each app version exclude signedCertThumbPrint.

Args: profile_id: The enterprise app store profile ID (e.g. UUID). page: Page number for app versions (1-based). Default: 1. size: Page size for app versions (1-100). Default: 25. Values above 100 are capped at 100.

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (single store profile object with appVersions), meta (app-versions pagination). - Error: success (false), error (tool, type, message, details). Profile and app versions exclude signedCertThumbPrint. Meta contains page, page_size, total_count, etc.

Examples: Get profile details: get_store_profile_details(profile_id="uuid-here") Get first page of app versions (5 per page): get_store_profile_details(profile_id="uuid", page=1, size=5)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sizeNo
profile_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Despite no annotations, the description fully discloses behavioral traits: it returns profile details and paginated app versions, excludes signedCertThumbPrint, and describes the return envelope (success/error structure).

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 well-structured with a purpose sentence, bullet-like Args/Returns/Examples sections. Every sentence adds value with no redundancy.

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

Completeness5/5

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

Given the existence of an output schema and the description's thorough coverage of purpose, parameters, and return behavior, the tool is fully specified for an agent to select and invoke correctly.

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

Parameters5/5

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

With 0% schema description coverage, the description compensates fully by detailing each parameter: profile_id as UUID, page as 1-based default 1, size as 1-100 default 25 capped at 100.

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 clearly states it retrieves a single enterprise app store profile by ID with optional app versions pagination. It distinguishes from sibling tools like get_store_profiles (which likely lists profiles) by specifying 'single profile' and 'by ID'.

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 parameter usage (page, size, defaults, constraints) and examples, but does not explicitly mention when to use this tool versus alternatives like get_store_profiles or other detail endpoints.

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

get_store_profilesAInspect

Get enterprise app store profiles for the current organization (paginated).

Returns a list of enterprise app store profiles with their IDs, names, and configuration details. This tool does not support search filtering.

Args: page: Page number (1-based). Default: 1. size: Page size (1-100). Default: 25. Values above 100 are capped at 100.

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (list of enterprise app store profile objects), meta (count, page, page_size). - Error: success (false), error (tool, type, message, details).

Examples: Get first page (default size 25): get_store_profiles() Get page 2 with 10 items: get_store_profiles(page=2, size=10)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/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. It explains pagination, parameters, and return format, but does not explicitly state that the tool is read-only, safe, or any authentication/rate limit details. For a list tool, the safety is implicit but not explicit.

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 well-structured with clear sections for purpose, arguments, return format, and examples. Every sentence adds value without redundancy.

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 tool has 2 parameters, a paginated list response, and an output schema exists, the description is mostly complete. It explains the return envelope and gives examples. However, it does not mention if the list is ordered or any implicit limits on page number.

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

Parameters5/5

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

Schema coverage is 0%, but the description fully explains both parameters (page and size) including defaults, constraints (size capped at 100), and usage examples. This adds significant value beyond the empty schema.

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 clearly states it gets enterprise app store profiles for the current organization, paginated, and returns IDs, names, and configuration details. It also notes it does not support search filtering, which helps distinguish it from potential sibling tools that might offer search.

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 explicitly says 'This tool does not support search filtering,' which tells the agent when not to use it. However, it does not name an alternative tool for filtered searches, leaving some ambiguity.

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

get_workflow_detailAInspect

Get a single workflow by build profile ID and workflow ID.

Returns the workflow with the given IDs, including workflow name, workflow document (YAML definition of steps), and last used time.

Args: profile_id: The build profile ID (e.g. UUID). workflow_id: The workflow ID (e.g. UUID).

Returns: Standard envelope (see docs/tool_contract.md): - Success: success (true), data (workflow object with id, profileId, workflowName, workflowDocument, lastUsedTime, etc.), meta (empty). - Error: success (false), error (tool, type, message, details).

Examples: Get workflow detail: get_workflow_detail(profile_id="uuid", workflow_id="workflow-uuid")

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_idYes
workflow_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. Discloses it is a read operation and describes return format and error envelope. However, lacks mention of permissions, rate limits, or potential side effects.

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?

Well-structured with sections (Args, Returns, Examples). Front-loaded with core purpose. Concise but could omit redundant 'Returns' section or merge with Examples.

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

Completeness5/5

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

Given output schema exists, description still provides full details on return envelope and data fields. Includes example usage. Sufficient for an agent to correctly invoke the 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?

Description adds meaning beyond schema by explaining each parameter's purpose and format (UUID). Schema has 0% description coverage, so description compensates well.

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?

Clearly states 'Get a single workflow' by specific IDs. Distinguishes from sibling tools like get_build_profile_workflows (which lists workflows) and get_build_profiles (which gets profile list).

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?

Explicitly tells when to use (to retrieve a single workflow by profile and workflow ID). Does not mention when not to use or alternatives, but context with siblings implies the differentiation.

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. Dates show when Glama detected each change.

  1. 25 tool updatesv0.1.0
    • First observedget_build_configuration_details
    • First observedget_build_history_report
    • First observedget_build_insights_report
    • First observedget_build_profile_details
    • First observedget_build_profile_workflows
    • First observedget_build_profiles
    • First observedget_bundle_identifiers
    • First observedget_certificates
    • First observedget_commit_details
    • First observedget_commits_by_branch
    • First observedget_distribution_app_version_report
    • First observedget_distribution_profile_details
    • First observedget_distribution_profiles
    • First observedget_distribution_sent_report
    • First observedget_enterprise_app_store_app_usage_report
    • First observedget_keystores
    • First observedget_provisioning_profiles
    • First observedget_publish_profile_details
    • First observedget_publish_profiles
    • First observedget_publish_resign_report
    • First observedget_publish_status_report
    • First observedget_signing_report
    • First observedget_store_profile_details
    • First observedget_store_profiles
    • First observedget_workflow_detail

TDQS

A4.3/5.0
Disambiguation5/5

Each tool targets a distinct resource or report type. For example, get_build_profiles lists profiles while get_build_profile_details retrieves a single profile; similarly, separate tools for commits, certificates, keystores, and various reports (build history, insights, signing, distribution, etc.) all have clearly differentiated purposes without overlap.

Naming Consistency5/5

All tool names follow a consistent 'get_' prefix followed by a descriptive noun phrase using underscores (e.g., get_build_profiles, get_build_profile_details, get_build_insights_report). Plural nouns are used for list operations and singular for details, maintaining a clear and predictable pattern throughout.

Tool Count4/5

With 25 tools, the set is on the higher end but still well-scoped for a mobile CI/CD platform covering build profiles, certificates, keystores, provisioning, distribution, and numerous reports. Each tool serves a distinct purpose, and the count is not excessive given the breadth of functionality.

Completeness4/5

The tool set is comprehensive for read-only operations, covering major entities like profiles, commits, certificates, and keystores along with various reports. Minor gaps exist: there is no tool to list branches or organizations, and individual build details are only accessible indirectly through reports or commit details. These omissions do not severely hinder common workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/appcircleio/appcircle-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server