Apple Ads MCP

Servidor MCP local-first para pesquisa, otimização e gerenciamento de campanhas da App Store com acesso restrito por recibo, a partir do Claude, Codex e outros clientes MCP.

Documentação

Apple Ads MCP

CI Release Go License

Apple Ads MCP é um servidor Model Context Protocol local-first para a Apple Ads Platform API v1. Ele fornece ao Codex, Claude e outros clientes MCP ferramentas tipadas para pesquisar, inspecionar e operar com segurança contas de publicidade na App Store.

O servidor é somente leitura por padrão. As credenciais permanecem na sua máquina, toda chamada com escopo de conta nomeia um perfil e uma conta de anúncios explícitos, e toda mutação exige uma prévia mais um recibo de uso único de curta duração.

Apple Ads MCP é um software de código aberto independente. Não é afiliado, endossado ou patrocinado pela Apple Inc. Apple Ads e App Store são marcas registradas da Apple Inc.

Início rápido

Instale o binário publicado com Homebrew no macOS ou Linux:

brew install zelentsov-dev/tap/apple-ads-mcp
apple-ads-mcp version

Crie um perfil local somente leitura. O comando armazena um caminho absoluto da chave privada; nunca cole a chave privada em um chat, issue, log ou repositório:

apple-ads-mcp config init
apple-ads-mcp auth doctor --profile production-read-only
apple-ads-mcp accounts discover --profile production-read-only

Registre o servidor com um caminho absoluto do Homebrew para que aplicativos de desktop e extensões de IDE não dependam do PATH herdado do shell.

Codex:

codex mcp add apple-ads -- "$(brew --prefix)/bin/apple-ads-mcp" serve --stdio
codex mcp list

Claude Code:

claude mcp add --scope user apple-ads -- "$(brew --prefix)/bin/apple-ads-mcp" serve --stdio
claude mcp get apple-ads

Reinicie um aplicativo de desktop, sessão CLI ou extensão de IDE já em execução e inicie uma nova conversa. Uma primeira solicitação segura é:

Chame server_info e depois execute account_health para meu perfil, conta de anúncios e aplicativo explícitos. Não habilite gravações.

Outros iniciadores somente leitura úteis:

  • "Liste os aplicativos que posso anunciar e explique quaisquer lacunas de elegibilidade."
  • "Audite minha estrutura atual de campanhas do Apple Ads sem alterar nada."
  • "Encontre oportunidades de palavras-chave e separe as evidências da Apple das suas inferências."

Versão atual

v0.3.5 é a versão atual. Os nomes de seus arquivos terminam com a versão semântica para que o Homebrew não possa inferir 64 a partir do sufixo arm64. Esta correção apenas de empacotamento não altera os nomes ou esquemas das ferramentas MCP. A confiança com escopo de fórmula para Homebrew 6 desde v0.3.4, verificação de caminho exato desde v0.3.3 e integração com um comando desde v0.3.2 permanecem intactas.

A otimização nunca é autônoma: o servidor não tem agendador e nunca altera gastos em segundo plano. Uma sessão somente leitura pode construir uma linha de base e um plano. Aplicar um plano ainda exige todas as portas de gravação, uma política nomeada ativa, um recibo, um relatório atualizado e verificação de desvio de inventário, além de verificação em nível de item.

A versão suporta os quatro posicionamentos da App Store expostos pela Apple:

  • Resultados de pesquisa
  • Aba de pesquisa
  • Aba Hoje
  • Páginas de produto

A disponibilidade do posicionamento ainda depende da conta, aplicativo, loja, criativo e resposta de elegibilidade da Apple. Um posicionamento indisponível é relatado como not_eligible; o servidor não tenta contornar a validação da Apple.

Palavras-chave e palavras-chave negativas são recursos de Resultados de pesquisa. A Platform API rejeita recursos explícitos de Ad para campanhas de Resultados de pesquisa, portanto esse posicionamento é operado por meio de sua campanha, grupo de anúncios, palavras-chave e configuração de página de produto; anúncios explícitos permanecem sujeitos à elegibilidade para os outros posicionamentos. Um criativo de página de produto padrão é único por aplicativo e conta de anúncios, portanto os operadores devem consultá-lo e reutilizá-lo em vez de tentar criar uma duplicata.

O que ele pode fazer

ÁreaFerramentas principais
Acesso e prontidãoauth_check, ad_accounts_list, ad_account_get, advertiser_resources_list, account_health
Aplicativos e lojasapps_search, apps_get, apps_eligibility, app_locale_details, supported_app_languages, app_store_geo_search
Inventáriocampaigns_query, ad_groups_query, keywords_query, negative_keywords_query, ads_query, creatives_query, shared_budgets_query, campaign_inventory
Diagnósticomotivos de rejeição, motivos de status de campanha, histórico de alterações, auditorias de conta e campanha
Pesquisasugestões de palavras-chave, frases, categorias, CPA-alvo, popularidade de pesquisa, participação de impressões
Relatóriosrelatórios tipados de campanha, grupo de anúncios, anúncio, palavra-chave e termo de pesquisa
Operação de campanhacriar/atualizar, orçamento, países, programação, pausar e retomar prévias
Operação de grupo de anúncioscriar/atualizar, programação, segmentação, Search Match, lance, limite de CPA, pausar e retomar prévias
Palavras-chavecriar/atualizar em lote ou individual de palavras-chave de segmentação/negativas, lance, pausar e retomar prévias
Anúncios e criativoscriar/atualizar, pausar e retomar prévias de criativos e anúncios tipados da App Store
Recomendaçõesler, prévia de aplicação e prévia de dispensa para orçamento diário e CPA-alvo
Otimizaçãopolíticas locais nomeadas, linhas de base de 28 dias, planos de aprendizado/ativos, prévia/aplicação/verificação compostas e histórico limitado
Orçamentos compartilhadosprévias tipadas somente LOC de criar/atualizar/atribuir/desatribuir com perfis de cobrança locais privados
Ciclo de vidaprévias de exclusão separadamente controladas para campanha, grupo de anúncios, palavra-chave, palavra-chave negativa, anúncio, criativo e orçamento compartilhado
Verificaçãooperations_inspect, operations_apply, operations_verify e leitura direta de recursos

Toda lista é limitada a 200 itens e usa paginação next. As respostas incluem texto conciso mais structuredContent MCP; envelopes brutos da Apple e PII de contato de cobrança não são expostos.

Não há ferramenta de solicitação bruta, mutação de conta/delegação, agendador automático, superfície do Apple Maps ou suporte legado à Campaign Management API v5.

Modelo de segurança

Uma gravação só é possível quando todas as portas passam:

  1. O usuário da API da Apple tem uma função de gravação compatível.
  2. O servidor inicia com --allow-writes.
  3. O perfil selecionado tem allowWrites: true.
  4. Uma ferramenta especializada *_preview valida a conta, aplicativo, loja, posicionamento, moeda e carga útil.
  5. operations_apply recebe o mesmo recibo não expirado.
  6. O inventário afetado ainda corresponde ao estado capturado durante a prévia.

Os recibos de prévia expiram após dez minutos e são de uso único para aplicação. Os recibos em lote vinculam todo o instantâneo de inventário e retornam estados em nível de item applied, failed ou unknown. A Apple pode aceitar parcialmente um lote; o servidor nunca promete reversão. Se uma aplicação de otimização tiver um resultado não resolvido, uma receita de recuperação sanitizada permanece no histórico local somente do proprietário para que operations_verify possa reconciliar o recibo fornecido após uma reinicialização do processo ou evicção normal de prévia.

Solicitações de mutação não são repetidas após um tempo limite. O resultado é committed_unverified, ou em nível de item unknown, até que operations_verify e leitura direta estabeleçam o estado real.

As operações de aplicação de recomendação exigem um maximumAmount explícito. A moeda da recomendação deve corresponder à conta de anúncios, o valor proposto deve permanecer abaixo do limite e a recomendação mais a campanha promovida são relidas antes da aplicação.

Uma exclusão irreversível tem cinco portas adicionais: --allow-deletes, perfil allowDeletes: true, APPLE_ADS_ALLOW_DELETES=true somente de sessão, um nome de objeto ou texto de palavra-chave exato esperado e um recibo de exclusão especializado. Campanhas e pais devem estar PAUSED; o inventário em cascata é limitado e com hash; criativos não devem ter anúncios referenciados; orçamentos compartilhados não devem ter atribuições. DELETE nunca é repetido após um resultado ambíguo.

Validação da versão

O candidato a versão v0.3 passou na suíte completa de compatibilidade v0.2, testes de contrato stdio MCP, testes unitários e HTTP, detector de corrida, análise estática, validação de distribuição e aceitação ao vivo controlada pelo proprietário contra a Apple Ads API v1.

A aceitação ao vivo confirmou linhas de base e planos de otimização somente leitura, criação e leitura de fixture PAUSED, atualizações de orçamento/lance/estratégia, pausar/retomar, verificações de desvio de recibo, verificação de itens e exclusão de campanhas, grupos de anúncios, palavras-chave e palavras-chave negativas descartáveis. Todos os fixtures retidos permaneceram PAUSED com gasto zero.

Caminhos dependentes de conta têm uma fronteira de evidência explícita:

  • Aplicação de plano de otimização ativo e MAX_CONVERSIONS permanecem verificados por teste automatizado até que uma campanha madura deliberadamente selecionada atenda aos requisitos mínimos de 14 dias de dados e às portas de elegibilidade da Apple.
  • Criar/atualizar/atribuir/excluir orçamento compartilhado permanecem verificados por contrato e teste HTTP porque a conta de aceitação ao vivo usa PAYG; a Apple exige LOC.
  • A exclusão de anúncio e criativo de página de produto padrão é confirmada como not_eligible porque a Apple não permite que esses recursos sejam excluídos individualmente.

Essas fronteiras não enfraquecem o modelo de segurança padrão: operações não suportadas ou com evidência insuficiente falham de forma fechada e nunca se tornam respostas vazias bem-sucedidas.

Instalação

PlataformaHomebrewArquivo GitHubImagem OCI
macOS arm64 / amd64Sim.tar.gzSomente contêiner Linux
Linux arm64 / amd64Sim.tar.gzSim
Windows arm64 / amd64Não.zipSomente contêiner Linux

Homebrew

O tap oficial instala um binário de versão com checksum fixado:

brew install zelentsov-dev/tap/apple-ads-mcp

Atualize versões posteriores com:

brew update
brew upgrade apple-ads-mcp

GitHub release

Baixe o arquivo para sua plataforma em GitHub Releases. As versões incluem checksums SHA-256 e SBOMs SPDX.

Exemplo para Apple silicon:

curl -LO https://github.com/zelentsov-dev/apple-ads-mcp/releases/download/v0.3.5/apple-ads-mcp_darwin_arm64_0.3.5.tar.gz
curl -LO https://github.com/zelentsov-dev/apple-ads-mcp/releases/download/v0.3.5/checksums.txt
shasum -a 256 -c checksums.txt --ignore-missing
tar -xzf apple-ads-mcp_darwin_arm64_0.3.5.tar.gz
sudo install -m 0755 apple-ads-mcp /usr/local/bin/apple-ads-mcp

Usuários do Windows devem verificar checksums.txt, extrair o ZIP correspondente e registrar o executável com seu caminho absoluto.

Imagem OCI

docker pull ghcr.io/zelentsov-dev/apple-ads-mcp:0.3.5

A imagem executa serve --stdio por padrão. Monte accounts.json e sua chave privada referenciada somente leitura.

Compilar a partir do código-fonte

git clone https://github.com/zelentsov-dev/apple-ads-mcp.git
cd apple-ads-mcp
go build -trimpath -o ./apple-ads-mcp ./cmd/apple-ads-mcp

Go 1.26.7 ou mais recente é necessário.

Configuração da API da Apple

O acesso à Apple Ads API é separado do acesso ao App Store Connect. Um administrador de conta do Apple Ads deve adicionar um usuário de API com a função apropriada. Prefira API Account Read Only até que alterações de campanha sejam necessárias.

Gere um par de chaves ES256 localmente:

umask 077
openssl ecparam -name prime256v1 -genkey -noout -out apple-ads-private-key.pem
openssl ec -in apple-ads-private-key.pem -pubout -out apple-ads-public-key.pem
chmod 600 apple-ads-private-key.pem

Envie apenas a chave pública no Apple Ads. Nunca cole a chave privada em uma conversa de agente, issue, log ou repositório. Depois que a Apple registrar a chave, registre o client ID, team ID e key ID mostrados na interface do Apple Ads.

Configurar

Crie um perfil interativamente:

apple-ads-mcp config init

O caminho de configuração padrão é ~/.config/apple-ads-mcp/accounts.json:

{
  "profiles": [
    {
      "name": "production-read-only",
      "clientId": "SEARCHADS.example-client-id",
      "teamId": "SEARCHADS.example-team-id",
      "keyId": "EXAMPLEKEY",
      "privateKeyPath": "/absolute/path/to/apple-ads-private-key.pem",
      "defaultAdAccountId": "123456789",
      "allowWrites": false,
      "allowDeletes": false
    }
  ]
}

Em sistemas POSIX, a configuração e a chave privada devem ser somente do proprietário:

chmod 600 ~/.config/apple-ads-mcp/accounts.json /absolute/path/to/apple-ads-private-key.pem

Valide a autenticação e descubra contas de anúncios acessíveis:

apple-ads-mcp auth doctor --profile production-read-only
apple-ads-mcp accounts discover --profile production-read-only

A precedência de configuração é --config, APPLE_ADS_MCP_CONFIG, o arquivo padrão e, em seguida, variáveis de ambiente de perfil único APPLE_ADS_*. As variáveis de perfil único suportadas são APPLE_ADS_PROFILE, APPLE_ADS_CLIENT_ID, APPLE_ADS_TEAM_ID, APPLE_ADS_KEY_ID, APPLE_ADS_PRIVATE_KEY_PATH, APPLE_ADS_AD_ACCOUNT_ID, APPLE_ADS_ALLOW_WRITES e APPLE_ADS_ALLOW_DELETES. Para um perfil com arquivo, as variáveis de ambiente não concedem silenciosamente permissão persistente de gravação ou exclusão.

Conectar um cliente MCP

O servidor usa stdio e grava MCP JSON-RPC apenas em stdout:

apple-ads-mcp serve --stdio

Para clientes com CLI, prefira um caminho absoluto do binário.

Configuração global do Codex:

codex mcp add apple-ads -- "$(brew --prefix)/bin/apple-ads-mcp" serve --stdio
codex mcp list

Codex Desktop, Codex CLI e a extensão de IDE compartilham a mesma configuração de host. Reinicie um cliente já em execução e abra uma nova conversa após adicionar o servidor.

Configuração de usuário do Claude Code:

claude mcp add --scope user apple-ads -- "$(brew --prefix)/bin/apple-ads-mcp" serve --stdio
claude mcp get apple-ads

A configuração de projeto do Claude pode usar o .mcp.json do repositório, mas cada workspace/servidor pode permanecer pendente até que o usuário o aprove. Reconecte de /mcp ou reinicie o Claude Code após a aprovação.

Configuração MCP genérica para clientes sem comando de registro:

{
  "mcpServers": {
    "apple-ads": {
      "command": "apple-ads-mcp",
      "args": ["serve", "--stdio"]
    }
  }
}

Substitua apple-ads-mcp pelo caminho absoluto do executável quando o cliente não herdar o PATH do Homebrew ou do shell. No Apple silicon, o caminho padrão do Homebrew é /opt/homebrew/bin/apple-ads-mcp; no macOS Intel, normalmente é /usr/local/bin/apple-ads-mcp.

Pacote de plugin e habilidade

Os arquivos de release incluem .codex-plugin/plugin.json, .mcp.json e a skill apple-ads-operator. Esses arquivos descrevem o servidor e o fluxo de trabalho seguro de operação para carregadores de plugin compatíveis, mas não instalam o executável, registram o servidor MCP nem concedem acesso ao Apple Ads por conta própria. Este repositório não é distribuído atualmente por meio de um marketplace público de plugins do Codex; Homebrew com registro no cliente é o caminho público de configuração suportado.

Verificar a conexão

Após reiniciar o cliente, confirme que apple-ads está habilitado ou conectado e peça para ele chamar server_info. Depois que as credenciais locais estiverem prontas, use o perfil e a conta explícitos para auth_check, ad_accounts_list e account_health.

Toda a verificação de configuração deve ser somente leitura. Não adicione --allow-writes, --allow-deletes, allowWrites ou allowDeletes durante a solução de problemas de instalação ou autenticação.

Solução de problemas

  • Executável não encontrado: use "$(brew --prefix)/bin/apple-ads-mcp" na configuração do cliente em vez de um comando simples.
  • Servidor já existe: remova apenas a entrada apple-ads existente desse cliente e adicione-a novamente com o caminho absoluto.
  • Claude mostra aprovação pendente: aprove o servidor MCP do projeto, reconecte-se de /mcp e inicie uma nova conversa.
  • Um cliente em execução ainda não tem as ferramentas: reinicie completamente o aplicativo de desktop, a sessão de CLI ou a extensão do IDE após alterar a configuração do MCP.
  • A autenticação falha: execute apple-ads-mcp auth doctor --profile <profile> localmente e confirme as permissões de arquivo e os identificadores não secretos; nunca cole a chave privada no chat.
  • O Homebrew rejeita uma fórmula local baixada: instale a partir do tap confiável com brew install zelentsov-dev/tap/apple-ads-mcp.

Configuração conduzida por agente

Um agente pode diagnosticar e executar a instalação somente com a aprovação do usuário. Ele deve verificar o binário, usar um caminho absoluto, registrar o escopo pretendido do cliente, reiniciar o cliente e parar após verificações de integridade somente leitura. Ele nunca deve solicitar o conteúdo da chave privada nem ativar silenciosamente os portões de mutação.

Habilitar gravações para uma sessão

Mantenha os perfis persistentes somente leitura. Para uma sessão de operador explicitamente autorizada, habilite ambos os portões locais:

APPLE_ADS_PROFILE=production-read-only \
APPLE_ADS_ALLOW_WRITES=true \
apple-ads-mcp serve --stdio --allow-writes

Isso não altera nada por si só. Toda mutação ainda precisa de profile explícito, adAccountId, uma prévia especializada, aplicação do recibo e verificação.

Configurar otimização sob demanda

Crie uma política local nomeada:

apple-ads-mcp optimization policy init
apple-ads-mcp optimization policy validate --name mature-product-balanced
apple-ads-mcp optimization doctor --policy mature-product-balanced

As políticas são armazenadas em ~/.config/apple-ads-mcp/optimization-policies.json com modo 0600. Cada política vincula um perfil, uma conta de anúncios, um app promovido e no máximo 20 IDs de campanha. O modo learning não exige meta de negócio e retorna apenas evidências. O modo active exige targetInstallCPA, limites de orçamento diário total e por campanha, além de permissões explícitas para orçamento, lance, estratégia, pausa, retomada e novo teste. Uma política que permite alterações de lance também deve definir um maxBid positivo na moeda da conta; o limite de orçamento diário nunca é reutilizado como limite de lance.

O preset balanced exige exatamente 28 dias consecutivos completos em UTC terminando ontem, compara os últimos 7 dias com os 7 anteriores, aplica um período de espera de 72 horas, normalmente propõe alterações de 10% e nunca excede 20% por execução. Evidências de relatório ausentes, duplicadas, futuras, malformadas ou com estouro falham de forma segura. Ele pode propor MAX_CONVERSIONS somente para inventário elegível de Search Results Search Match com média de pelo menos cinco instalações por toque por dia ao longo de 14 dias. Ele nunca propõe exclusão.

Fluxo típico do agente:

  1. Chame optimization_baseline e optimization_plan em um servidor somente leitura.
  2. Revise as recomendações da Apple separadamente das ações calculadas.
  3. Inicie uma sessão de gravação autorizada e chame optimization_plan_preview.
  4. Inspecione OperationImpact, aplique o mesmo recibo uma vez e chame operations_verify.
  5. Revise o histórico local limitado em ~/.local/share/apple-ads-mcp/optimization/.

Imediatamente antes da primeira gravação na Apple, o servidor persiste de forma durável uma intenção applying vinculada ao hash do recibo e uma receita de verificação tipada e sanitizada sob um bloqueio de arquivo entre processos. Os commits POSIX sincronizam o diretório contêiner; o Windows usa semântica de substituição com gravação direta. Um resultado desconhecido, verificação inconclusiva ou atualização de histórico interrompida bloqueia planos de otimização posteriores até que operations_verify reconcilie conclusivamente todos os itens afetados. A recuperação sobrevive à reinicialização do processo e à expiração normal do recibo em memória, mas exige o recibo opaco original do operador. Uma ação matched ou matched_after reconciliada inicia o período de espera a partir do horário original de intenção/aplicação; matched_before não. Uma campanha pode ser retomada automaticamente somente quando uma pausa verificada de propriedade do otimizador ainda tiver o mesmo modificationTime da Apple; qualquer alteração manual posterior revoga essa permissão. Nenhum recibo, credencial, envelope bruto da Apple ou contato de cobrança é armazenado no histórico de otimização.

Orçamentos compartilhados e operações de ciclo de vida

As mutações de orçamento compartilhado estão disponíveis somente quando a Apple informa o modelo de pagamento da conta como LOC. As operações de criação e atualização vinculam o orçamento exclusivamente à conta de anúncios explicitamente selecionada. As ferramentas de atribuição de campanha preservam atribuições existentes não relacionadas, e orçamentos compartilhados entre contas falham de forma segura. Inicialize os dados de cobrança privados localmente:

apple-ads-mcp billing profile init

~/.config/apple-ads-mcp/billing-profiles.json deve ser 0600. As entradas do MCP contêm apenas o nome local billingProfile. Nomes de compradores e endereços de e-mail não são retornados na saída das ferramentas, em logs, histórico ou prévias de recibos. Contas PAYG retornam not_eligible sem tentar uma gravação.

Para uma sessão de manutenção destrutiva explicitamente autorizada:

APPLE_ADS_ALLOW_WRITES=true \
APPLE_ADS_ALLOW_DELETES=true \
apple-ads-mcp serve --stdio --allow-writes --allow-deletes

O perfil selecionado com suporte a arquivo já deve conter allowDeletes: true; allowWrites pode ser habilitado somente para o processo atual com APPLE_ADS_ALLOW_WRITES=true. Os portões de exclusão do servidor e da sessão permanecem independentes. Use um *_delete_preview especializado, compare o impacto completo da cascata e o texto esperado exato, aplique uma vez e verifique deleted: true. Não use operações de ciclo de vida como parte de um plano de otimização.

Limites operacionais

  • A Apple não fornece um sandbox público da API de Ads. A aceitação de mutação ao vivo é manual, explicitamente habilitada, usa fixtures PAUSED claramente nomeados e nunca faz parte de CI automático.
  • Elegibilidade, sugestões, popularidade, recomendações, relatórios e suporte criativo variam por conta e loja.
  • Contas frias podem não ter recomendações de CPA-alvo ou orçamento diário.
  • Nomes de campanhas e objetos são validados pela Apple; a interface web e a API podem aceitar pontuações diferentes.
  • A Apple rejeita o caractere de barra vertical (|) em nomes de campanhas; use um nome legível com hífen. A criação de grupo de anúncios exige um startTime ISO 8601 no fuso horário da conta de anúncios.
  • Os relatórios podem atrasar e permanecer vazios até que a entrega ocorra.
  • A Apple rejeita a exclusão individual de um anúncio que usa a Default Product Page (CAN_NOT_DELETE_DPP_CREATIVE_AD). O servidor retorna not_eligible durante a prévia; use a exclusão de ciclo de vida somente para anúncios e criativos descartáveis de Custom Product Page.
  • A atribuição de teste e assinatura pertence à sua pilha de atribuição; a API da Apple Ads Platform sozinha não prova a atribuição de palavra-chave a teste.

Respostas conhecidas da API da Apple

Em 2026-08-25, os formatos de solicitação v1 documentados usados por este servidor produziram dois comportamentos upstream repetíveis durante a aceitação ao vivo:

  • phrase_suggestions e category_suggestions podem retornar HTTP 500 da Apple para uma consulta SUGGESTION mesmo quando keyword_suggestions e target_cpa_suggestions funcionam para o mesmo app de propriedade.
  • impression_share pode retornar HTTP 400 da Apple em uma conta fria ou totalmente pausada. Uma conta de aceitação controlada pelo proprietário não forneceu código ou detalhes de diagnóstico; reproduções públicas também relataram código INVALID_VALUE. A falta de entrega recente pode ser relevante, mas não é um pré-requisito ou solução alternativa confirmado pela Apple.

O servidor retorna esses casos como erros estruturados limitados da Apple, incluindo se o corpo upstream estava vazio ou não-JSON; ele não os converte em resultados vazios ou bem-sucedidos. Os formatos de solicitação correspondem à API atual da Apple Ads Platform e ao cliente Java oficial da Apple. Reproduções públicas comparáveis da v1 estão registradas em App Store Connect CLI PR #2057 e PR #2020. Reavalie depois que a Apple alterar a API ou a conta tiver histórico significativo de entrega.

Compatibilidade

A v0.3 preserva todos os nomes e esquemas de ferramentas da v0.2.1 e adiciona ferramentas de otimização, mutação de orçamento compartilhado, estratégia de lance e ciclo de vida. A v0.3.1 adiciona um maxBid obrigatório quando a permissão de lance está habilitada e regras de reconciliação com falha segura; consulte as notas de migração da v0.3.1. A v0.3.2 altera apenas distribuição e integração. A v0.3.3 muda a verificação de release para o caminho exato da fórmula do tap, a v0.3.4 adiciona confiança com escopo de fórmula para Homebrew 6 e a v0.3.5 desambigua a detecção de versão do Homebrew colocando a versão semântica no final dos nomes dos arquivos. Nenhum desses releases de empacotamento altera nomes ou esquemas de ferramentas do MCP. Clientes mais antigos também devem ler as notas da v0.3 e as notas da v0.2.

O esquema público de ferramentas não está congelado antes da v1.0. O escopo da família de API e o status da operação são rastreados na matriz de operações legível por máquina. A linha de base oficial do cliente Java e o inventário de endpoints da App Store são rastreados em upstream-baseline.json.

Desenvolvimento

gofmt -w cmd internal
go test ./...
go test -race ./...
go vet ./...
go run honnef.co/go/tools/cmd/staticcheck@v0.8.1 -checks 'all,-ST1000,-ST1005' ./...
go run golang.org/x/vuln/cmd/govulncheck@v1.7.0 ./...
go run github.com/zricethezav/gitleaks/v8@v8.29.1 dir --no-banner --redact .
go run github.com/goreleaser/goreleaser/v2@v2.17.1 check
go run github.com/rhysd/actionlint/cmd/actionlint@v1.7.12
npx --yes markdownlint-cli2@0.23.2 '**/*.md'
python3 scripts/validate_distribution.py
python3 scripts/audit_upstream.py

Consulte CONTRIBUTING.md, SECURITY.md e o roadmap.

Licença

MIT