Skip to content

Apple Developer MCP by Nova (CIVAI)

co.civai.nova/mcp-apple_developernova.civai.costreamable-httpv1.0.0Scanned

Ship a new iOS app from chat. AI runs App Store Connect, builds, release, and submission through Ap…

55 tools: 4 can delete or cancel things, 2 do something that can't be undone, 31 change things and 18 only read.

Tools: 4 delete, 2 irreversible, 31 write, 18 read.
  • Reads private data · 3
  • Reads text others write · 6
  • Can send data out · 2
  • No findings

Anlyon alternative

37 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

55 tools

Deletes or cancels 4Claude Code: deny
  • delete_bundle_idRemove a bundle ID from developer.apple.com (requires Developer Identifiers session from start_browser_auth).No findings

    Why it is in this group

    • The name "delete_bundle_id" says "delete": a word for removing or ending something.
    Description, as the server wrote it
    Remove a bundle ID from developer.apple.com (requires Developer Identifiers session from start_browser_auth).
  • delete_orphan_review_submissionsDelete empty READY_FOR_REVIEW review submission drafts (zero items) for an app.No findings

    Why it is in this group

    • The name "delete_orphan_review_submissions" says "delete": a word for removing or ending something.
    Description, as the server wrote it
    Delete empty READY_FOR_REVIEW review submission drafts (zero items) for an app. Use dry_run=true to list orphans only. Clears slots before press_submit_for_review.
  • delete_screenshotsDelete screenshots for targeted iPhone display types (e.g.No findings

    Why it is in this group

    • The name "delete_screenshots" says "delete": a word for removing or ending something.
    Description, as the server wrote it
    Delete screenshots for targeted iPhone display types (e.g. APP_IPHONE_61 only). Use dry_run=true to list without DELETE. Requires localization_id from get_app_store_version.
  • revoke_asc_api_keyPermanently revoke an App Store Connect API team key (cannot be undone).No findings

    Why it is in this group

    • The name "revoke_asc_api_key" says "revoke": a word for removing or ending something.
    • The description says "cannot be undone".
    Description, as the server wrote it
    Permanently revoke an App Store Connect API team key (cannot be undone).
Can't be undone 2Claude Code: ask
  • invite_asc_team_memberInvite a user to your App Store Connect team (email invitation, 3-day expiry).Can send data outNo findings

    Why it is in this group

    • The name "invite_asc_team_member" says "invite": a word for sending, and what is sent cannot be taken back.

    What it can reach

    • outboundThe name "invite_asc_team_member" says "invite": it sends or publishes something to other people.
    Description, as the server wrote it
    Invite a user to your App Store Connect team (email invitation, 3-day expiry). Required for internal TestFlight when they are not already a team user. Does not replace invite_testflight_testers (external beta emails).
  • invite_testflight_testersAdd testers to a TestFlight beta group by email.Can send data outNo findings

    Why it is in this group

    • The name "invite_testflight_testers" says "invite": a word for sending, and what is sent cannot be taken back.

    What it can reach

    • outboundThe name "invite_testflight_testers" says "invite": it sends or publishes something to other people.
    Description, as the server wrote it
    Add testers to a TestFlight beta group by email. testing_scope=internal: ASC team emails for Internal Testing group (required before TestFlight app shows the build). testing_scope=external: external group email invites.
Changes things 31Claude Code: ask
  • attach_build_and_complianceAfter Expo/CI has uploaded the .ipa to ASC: list builds for asc_app_id, wait until processing is VALID, attach build_id to app_store_version_id, set export compliance (uses_non_exe…No findings

    Why it is in this group

    • The name "attach_build_and_compliance" says "attach": a word for a change.
    Description, as the server wrote it
    After Expo/CI has uploaded the .ipa to ASC: list builds for asc_app_id, wait until processing is VALID, attach build_id to app_store_version_id, set export compliance (uses_non_exempt_encryption usually false).
  • attach_review_itemAttach an app store version or build item to an existing review submission by review_submission_id.No findings

    Why it is in this group

    • The name "attach_review_item" says "attach": a word for a change.
    Description, as the server wrote it
    Attach an app store version or build item to an existing review submission by review_submission_id. Use after create_review_submission when building a submission manually.
  • create_appCreate App Store Connect appNo findings

    Why it is in this group

    • The name "create_app" says "create": a word for a change.
    Description, as the server wrote it
    Create App Store Connect app
  • create_app_bundleCreate ASC app bundle (may 403 if tenant allows GET only).No findings

    Why it is in this group

    • The name "create_app_bundle" says "create": a word for a change.
    Description, as the server wrote it
    Create ASC app bundle (may 403 if tenant allows GET only).
  • create_asc_api_keyCreate an App Store Connect API team key.No findings

    Why it is in this group

    • The name "create_asc_api_key" says "create": a word for a change.
    Description, as the server wrote it
    Create an App Store Connect API team key. Optionally downloads the one-time .p8 private key PEM (treat like a password; never commit).
  • create_bundle_idRegister a new bundle ID on developer.apple.com (requires Developer Identifiers session from start_browser_auth).No findings

    Why it is in this group

    • The name "create_bundle_id" says "create": a word for a change.
    Description, as the server wrote it
    Register a new bundle ID on developer.apple.com (requires Developer Identifiers session from start_browser_auth).
  • create_review_submissionCreate a new, empty review submission (READY_FOR_REVIEW) for an app so a version/build can be attached before submit.No findings

    Why it is in this group

    • The name "create_review_submission" says "create": a word for a change.
    Description, as the server wrote it
    Create a new, empty review submission (READY_FOR_REVIEW) for an app so a version/build can be attached before submit. Use press_submit_for_review instead if you just want to submit the current version in one step.
  • distribute_build_to_testflightAdd a VALID build to TestFlight internal or external beta group.No findings

    Why it is in this group

    • The description's first verb is "add": a word for a change.
    Description, as the server wrote it
    Add a VALID build to TestFlight internal or external beta group. For internal, also pass tester_emails (ASC team addresses) or call invite_testflight_testers testing_scope=internal — otherwise ASC shows 0 Testers and TestFlight stays empty.
  • download_asc_api_keyDownload the one-time .p8 private key for an existing API key when canDownload is still true.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Download the one-time .p8 private key for an existing API key when canDownload is still true.
  • loginAfter operator completes Apple IDMSA in a browser, verify Developer portal session (checkPermissions).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    After operator completes Apple IDMSA in a browser, verify Developer portal session (checkPermissions).
  • press_submit_for_reviewBuild already on version: create review submission and PATCH submitted=true.No findings

    Why it is in this group

    • The name "press_submit_for_review" says "press": a word for a change.
    Description, as the server wrote it
    Build already on version: create review submission and PATCH submitted=true. Requires confirm_submit_for_review=true.
  • probe_update_version_localizationPATCH app store version localization promotional text (requires asc_app_id / localization_id on tenant).No findings

    Why it is in this group

    • The name "probe_update_version_localization" says "update": a word for a change.
    Description, as the server wrote it
    PATCH app store version localization promotional text (requires asc_app_id / localization_id on tenant).
  • set_age_ratingSet the app's age rating questionnaire answers (content descriptors) required before submit.No findings

    Why it is in this group

    • The name "set_age_rating" says "set": a word for a change.
    Description, as the server wrote it
    Set the app's age rating questionnaire answers (content descriptors) required before submit. Use once per app, or when content descriptors change.
  • set_app_privacySet App Privacy data-collection declarations (iris appDataUsages): pass app_privacy_profile=contact or analytics for the built-in presets, or app_privacy_profile=custom with an inl…No findings

    Why it is in this group

    • The name "set_app_privacy" says "set": a word for a change.
    Description, as the server wrote it
    Set App Privacy data-collection declarations (iris appDataUsages): pass app_privacy_profile=contact or analytics for the built-in presets, or app_privacy_profile=custom with an inline declarations JSON array when the presets don't match what the app actually collects. See SKILLS.md App Privacy section for the preset definitions.
  • set_app_store_metadataSet primary App Store category, version copyright, and third-party content rights declaration.No findings

    Why it is in this group

    • The name "set_app_store_metadata" says "set": a word for a change.
    Description, as the server wrote it
    Set primary App Store category, version copyright, and third-party content rights declaration.
  • set_export_compliancePATCH build export encryption flagNo findings

    Why it is in this group

    • The name "set_export_compliance" says "set": a word for a change.
    Description, as the server wrote it
    PATCH build export encryption flag
  • set_pricing_and_availabilitySet or read USA base price tier (0 free, 1+ paid).No findings

    Why it is in this group

    • The name "set_pricing_and_availability" says "set": a word for a change.
    Description, as the server wrote it
    Set or read USA base price tier (0 free, 1+ paid). Paid apps still need Agreements/Tax/Banking in ASC Business.
  • set_version_buildSet which build is attached to an app store version without also running export-compliance or wait-for-processing steps.No findings

    Why it is in this group

    • The name "set_version_build" says "set": a word for a change.
    Description, as the server wrote it
    Set which build is attached to an app store version without also running export-compliance or wait-for-processing steps. Use attach_build_and_compliance instead when the build may still be processing.
  • start_browser_authOpen App Store Connect sign-in only when needed.No findings

    Why it is in this group

    • The name "start_browser_auth" says "start": a word for a change.
    Description, as the server wrote it
    Open App Store Connect sign-in only when needed. If the saved session is still valid, this tool returns success immediately and does not open the viewer. Call session_status first. Use force_reconnect only when the user explicitly wants to wipe the saved cookie and sign in again (destructive).
  • submit_build_and_press_submitUpload done: attach latest/build number/build_id to current version, then press Submit for Review in ASC via API.No findings

    Why it is in this group

    • The name "submit_build_and_press_submit" says "submit": a word for a change.
    • The name "submit_build_and_press_submit" also says "press": a word for a change.
    Description, as the server wrote it
    Upload done: attach latest/build number/build_id to current version, then press Submit for Review in ASC via API.
  • submit_build_for_reviewOperator uploaded a new build: attach latest, build_number (ASC build version), or build_id to the current store version; optionally submit for review when confirm_submit_for_revie…No findings

    Why it is in this group

    • The name "submit_build_for_review" says "submit": a word for a change.
    Description, as the server wrote it
    Operator uploaded a new build: attach latest, build_number (ASC build version), or build_id to the current store version; optionally submit for review when confirm_submit_for_review=true.
  • submit_for_reviewPress Submit for Review, restricted to apps on the probe/disposable allowlist (checked server-side) and gated behind confirm_probe_submit=true.No findings

    Why it is in this group

    • The name "submit_for_review" says "submit": a word for a change.
    Description, as the server wrote it
    Press Submit for Review, restricted to apps on the probe/disposable allowlist (checked server-side) and gated behind confirm_probe_submit=true. For regular apps use press_submit_for_review or submit_build_and_press_submit instead; this tool exists only for automated testing against throwaway apps.
  • submit_testflight_beta_reviewSubmit a processed build for TestFlight external Beta App Review (iris betaAppReviewSubmissions).No findings

    Why it is in this group

    • The name "submit_testflight_beta_review" says "submit": a word for a change.
    Description, as the server wrote it
    Submit a processed build for TestFlight external Beta App Review (iris betaAppReviewSubmissions). Not App Store press_submit_for_review. Fills beta app description, what to test, contact, and privacy URL when provided. Poll get_testflight_public_link until accepting_public_testers is true before sharing the join URL.
  • update_appUpdate an existing app's name, primary locale, or bundle id (PATCH apps).No findings

    Why it is in this group

    • The name "update_app" says "update": a word for a change.
    Description, as the server wrote it
    Update an existing app's name, primary locale, or bundle id (PATCH apps). Use when correcting app-level metadata after create_app.
  • update_app_info_localizationUpdate the localized app name, subtitle, and privacy policy URL for one locale (PATCH app info localization).No findings

    Why it is in this group

    • The name "update_app_info_localization" says "update": a word for a change.
    Description, as the server wrote it
    Update the localized app name, subtitle, and privacy policy URL for one locale (PATCH app info localization). Use for text shown on the App Store listing page, not screenshots.
  • update_app_review_informationCreate or update App Store review contact and demo sign-in for the current version (iris appStoreReviewDetail).No findings

    Why it is in this group

    • The name "update_app_review_information" says "update": a word for a change.
    Description, as the server wrote it
    Create or update App Store review contact and demo sign-in for the current version (iris appStoreReviewDetail). Required before press_submit_for_review for login apps.
  • update_version_localizationUpdate the current app store version's description, keywords, promotional text, what's new, support URL, or marketing URL for one localization (PATCH app store version localization…No findings

    Why it is in this group

    • The name "update_version_localization" says "update": a word for a change.
    Description, as the server wrote it
    Update the current app store version's description, keywords, promotional text, what's new, support URL, or marketing URL for one localization (PATCH app store version localization). Use for App Store listing copy tied to a specific version, not app-level info (see update_app_info_localization).
  • upload_buildUpload a .ipa to App Store Connect via Transporter on the replay host.No findings

    Why it is in this group

    • The name "upload_build" says "upload": a word for a change.
    Description, as the server wrote it
    Upload a .ipa to App Store Connect via Transporter on the replay host. For CI/Expo-built apps, upload the .ipa through Expo or your CI pipeline directly and skip this tool — it exists only for builds that must be uploaded from the replay host itself. Supply ipa_url (https) or the host-local ipa_path.
  • upload_screenshotUpload one App Store screenshot into a single carousel slot via the screenshot bytes (screenshot_image_base64) or a URL to fetch them from (screenshot_image_url).No findings

    Why it is in this group

    • The name "upload_screenshot" says "upload": a word for a change.
    Description, as the server wrote it
    Upload one App Store screenshot into a single carousel slot via the screenshot bytes (screenshot_image_base64) or a URL to fetch them from (screenshot_image_url). Call once per slide (default size APP_IPHONE_65 / 6.5″); screenshot_file_path only works when the file already exists on the replay host's filesystem.
  • upload_screenshotsUpload one App Store screenshot for a single iPhone display size from a master image that this tool auto-resizes.No findings

    Why it is in this group

    • The name "upload_screenshots" says "upload": a word for a change.
    Description, as the server wrote it
    Upload one App Store screenshot for a single iPhone display size from a master image that this tool auto-resizes. Pass screenshot_image_base64 or screenshot_image_url when the image bytes or a fetchable URL are available; use screenshot_display_types to pick exactly one display size per call, and call again for additional sizes.
Only reads 18Show 18 read-only tools
  • get_account_compliance_statusBusiness portal links for Agreements/Tax/Banking plus price schedule hints (contracts are human-signed).No findings

    Why it is in this group

    • The name "get_account_compliance_status" says "get": a word for reading.
    Description, as the server wrote it
    Business portal links for Agreements/Tax/Banking plus price schedule hints (contracts are human-signed).
  • get_appGet one app's details (name, bundle id, SKU) by asc_app_id.No findings

    Why it is in this group

    • The name "get_app" says "get": a word for reading.
    Description, as the server wrote it
    Get one app's details (name, bundle id, SKU) by asc_app_id. Use to confirm the right app before making changes to it.
  • get_app_store_versionGET iOS appStoreVersions for asc_app_idNo findings

    Why it is in this group

    • The name "get_app_store_version" says "get": a word for reading.
    Description, as the server wrote it
    GET iOS appStoreVersions for asc_app_id
  • get_buildGet one build's processing state and metadata by build_id.No findings

    Why it is in this group

    • The name "get_build" says "get": a word for reading.
    Description, as the server wrote it
    Get one build's processing state and metadata by build_id. Use before attach_build_and_compliance to confirm the build finished processing.
  • get_bundle_idGet details for one existing bundle ID by its ASC resource id.No findings

    Why it is in this group

    • The name "get_bundle_id" says "get": a word for reading.
    Description, as the server wrote it
    Get details for one existing bundle ID by its ASC resource id. Use after list_bundle_ids to confirm platform and capabilities before create_app.
  • get_pre_submit_statusRead-only checklist before Submit for Review (build, privacy, category, copyright).Reads text others writeNo findings

    Why it is in this group

    • The name "get_pre_submit_status" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "read" and "review": it reads comments, which other people can write.
    Description, as the server wrote it
    Read-only checklist before Submit for Review (build, privacy, category, copyright). Includes orphan_review_submission_ids for empty drafts.
  • get_review_pathGet the Resolution Center and App Review URLs for an app, for messages Apple has not exposed via list_review_messages.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "get_review_path" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "get" and "message": it reads messages.
    • untrusted-inputThe name "get_review_path" says "get" and "review": it reads comments, which other people can write.
    • untrusted-inputThe description's first sentence says "get" and "review": it reads comments, which other people can write.
    Description, as the server wrote it
    Get the Resolution Center and App Review URLs for an app, for messages Apple has not exposed via list_review_messages. Use when an operator needs to open the review thread directly in a browser.
  • get_review_submissionGet the status and attached items of one review submission by review_submission_id.Reads text others writeNo findings

    Why it is in this group

    • The name "get_review_submission" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe name "get_review_submission" says "get" and "review": it reads comments, which other people can write.
    • untrusted-inputThe description's first sentence says "get" and "review": it reads comments, which other people can write.
    Description, as the server wrote it
    Get the status and attached items of one review submission by review_submission_id. Use to check progress after create_review_submission.
  • list_app_bundlesList ASC app bundles (iris GET /appBundles).No findings

    Why it is in this group

    • The name "list_app_bundles" says "list": a word for reading.
    Description, as the server wrote it
    List ASC app bundles (iris GET /appBundles).
  • list_app_media_setsList existing screenshot and app preview sets for an app store version localization (read-only).No findings

    Why it is in this group

    • The name "list_app_media_sets" says "list": a word for reading.
    Description, as the server wrote it
    List existing screenshot and app preview sets for an app store version localization (read-only). Use before upload_screenshot to see which display sizes already have assets.
  • list_appsList apps visible to the current App Store Connect session.No findings

    Why it is in this group

    • The name "list_apps" says "list": a word for reading.
    Description, as the server wrote it
    List apps visible to the current App Store Connect session. Use to find an existing asc_app_id before create_app or any per-app tool.
  • list_asc_api_keysList App Store Connect API team keys and the team issuer id (for EAS / CI).No findings

    Why it is in this group

    • The name "list_asc_api_keys" says "list": a word for reading.
    Description, as the server wrote it
    List App Store Connect API team keys and the team issuer id (for EAS / CI). Does not return private keys.
  • list_asc_team_membersList active App Store Connect team members and pending email invitations, returning only each person's identifier (email/username) and roles.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "list_asc_team_members" says "list": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "list" and "email": it reads mail.
    • untrusted-inputThe description's first sentence says "list" and "email": it reads inbound email, which other people can write.
    Description, as the server wrote it
    List active App Store Connect team members and pending email invitations, returning only each person's identifier (email/username) and roles. Use before internal TestFlight distribution to confirm someone is on the team and has a TestFlight-eligible role.
  • list_buildsList ASC builds for asc_app_id (newest first).No findings

    Why it is in this group

    • The name "list_builds" says "list": a word for reading.
    Description, as the server wrote it
    List ASC builds for asc_app_id (newest first). Use before attach if operator names a build number.
  • list_bundle_idsList bundle IDs registered on developer.apple.com for the current team.No findings

    Why it is in this group

    • The name "list_bundle_ids" says "list": a word for reading.
    Description, as the server wrote it
    List bundle IDs registered on developer.apple.com for the current team. Use to find an existing bundle_id before create_bundle_id or get_bundle_id.
  • list_review_messagesResolution Center threads and App Review messages for asc_app_id.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "list_review_messages" says "list": a word for reading.

    What it can reach

    • private-dataThe name "list_review_messages" says "list" and "message": it reads messages.
    • private-dataThe description's first sentence says "thread": it reads messages.
    • untrusted-inputThe name "list_review_messages" says "list" and "review": it reads comments, which other people can write.
    • untrusted-inputThe description's first sentence says "thread": it reads messages, which other people can write.
    Description, as the server wrote it
    Resolution Center threads and App Review messages for asc_app_id. Empty threads until Apple opens a rejection/message thread.
  • session_statusASC session checkNo findings

    Why it is in this group

    • The name "session_status" says "status": a word for reading.
    Description, as the server wrote it
    ASC session check
  • wait_build_processedPoll until build processing VALIDNo findings

    Why it is in this group

    • The name "wait_build_processed" says "wait": a word for reading.
    Description, as the server wrote it
    Poll until build processing VALID

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

36 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 2 outbound tools breaks every one.

Reads private data3
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write6
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
Can send data out2
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
deny to break every path
{
  "permissions": {
    "deny": [
      "mcp__apple_developer__invite_asc_team_member",
      "mcp__apple_developer__invite_testflight_testers"
    ]
  }
}

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Findings

Matches of fixed checks, with the text they matched.

No check matched anything in these tool definitions. That is not a safety guarantee.

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http apple_developer https://nova.civai.co/mcp/agents/mcp-apple_developer
claude mcp add --transport http apple_developer https://nova.civai.co/mcp/agents/mcp-apple_developer

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__apple_developer__session_status",
      "mcp__apple_developer__list_bundle_ids",
      "mcp__apple_developer__list_asc_api_keys",
      "mcp__apple_developer__get_bundle_id",
      "mcp__apple_developer__list_apps",
      "mcp__apple_developer__list_app_bundles",
      "mcp__apple_developer__get_app",
      "mcp__apple_developer__list_builds",
      "mcp__apple_developer__get_review_submission",
      "mcp__apple_developer__list_review_messages",
      "mcp__apple_developer__list_asc_team_members",
      "mcp__apple_developer__list_app_media_sets",
      "mcp__apple_developer__get_build",
      "mcp__apple_developer__get_review_path",
      "mcp__apple_developer__get_app_store_version",
      "mcp__apple_developer__wait_build_processed",
      "mcp__apple_developer__get_pre_submit_status",
      "mcp__apple_developer__get_account_compliance_status"
    ],
    "ask": [
      "mcp__apple_developer__login",
      "mcp__apple_developer__create_bundle_id",
      "mcp__apple_developer__create_asc_api_key",
      "mcp__apple_developer__download_asc_api_key",
      "mcp__apple_developer__create_app_bundle",
      "mcp__apple_developer__create_app",
      "mcp__apple_developer__update_app",
      "mcp__apple_developer__probe_update_version_localization",
      "mcp__apple_developer__update_version_localization",
      "mcp__apple_developer__get_testflight_public_link",
      "mcp__apple_developer__submit_testflight_beta_review",
      "mcp__apple_developer__submit_build_for_review",
      "mcp__apple_developer__upload_build",
      "mcp__apple_developer__set_version_build",
      "mcp__apple_developer__create_review_submission",
      "mcp__apple_developer__attach_review_item",
      "mcp__apple_developer__submit_build_and_press_submit",
      "mcp__apple_developer__press_submit_for_review",
      "mcp__apple_developer__submit_for_review",
      "mcp__apple_developer__distribute_build_to_testflight",
      "mcp__apple_developer__invite_testflight_testers",
      "mcp__apple_developer__invite_asc_team_member",
      "mcp__apple_developer__update_app_info_localization",
      "mcp__apple_developer__upload_screenshot",
      "mcp__apple_developer__set_export_compliance",
      "mcp__apple_developer__attach_build_and_compliance",
      "mcp__apple_developer__update_app_review_information",
      "mcp__apple_developer__set_age_rating",
      "mcp__apple_developer__set_app_store_metadata",
      "mcp__apple_developer__set_app_privacy",
      "mcp__apple_developer__set_pricing_and_availability",
      "mcp__apple_developer__upload_screenshots",
      "mcp__apple_developer__start_browser_auth"
    ],
    "deny": [
      "mcp__apple_developer__delete_bundle_id",
      "mcp__apple_developer__revoke_asc_api_key",
      "mcp__apple_developer__delete_orphan_review_submissions",
      "mcp__apple_developer__delete_screenshots"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as apple_developer. Review it before you use it.

Capability tags behind 8 rules
  • mcp__apple_developer__get_testflight_public_link untrusted-input
  • mcp__apple_developer__get_review_submission untrusted-input
  • mcp__apple_developer__list_review_messages private-data, untrusted-input
  • mcp__apple_developer__invite_testflight_testers outbound
  • mcp__apple_developer__list_asc_team_members private-data, untrusted-input
  • mcp__apple_developer__invite_asc_team_member outbound
  • mcp__apple_developer__get_review_path private-data, untrusted-input
  • mcp__apple_developer__get_pre_submit_status untrusted-input

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/co.civai.nova/mcp-apple_developer/verify?hash=4c4e04d176a6c6eb64a13604308f78172c7c1714f5caa42cf86ba0254cee5f23" | jq -e '.changed == false'

Pinned hash 4c4e04d176a6, from Nov 2, 2026, 09:18 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/co.civai.nova/mcp-apple_developer/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for co.civai.nova/mcp-apple_developer
[![anlyon.dev](https://anlyon.dev/badge/co.civai.nova/mcp-apple_developer.svg)](https://anlyon.dev/servers/co.civai.nova/mcp-apple_developer)

Source: MCP Registry. Synced Nov 2, 2026, 09:17 UTC.