amazon-ads-write-recovery
Skill0 starsChanged 3 months agoMITView on GitHub
Use when an AI agent is applying Amazon Ads mutations through Titanos MCP and must use dry-run, idempotency, readback, partial-write recovery, duplicate prevention, or backend error troubleshooting.
In this repository24 other files it gives its agents.
- amazon-ads-keyword-target-builderSkill
- amazon-ads-launch-playbookSkill
- amazon-ads-optimizationSkill
- amazon-ads-reports-troubleshootingSkill
- amazon-adsSkill
- amazon-competitor-radarSkill
- amazon-dspSkill
- amazon-keyword-intelligenceSkill
- amazon-listing-auditSkill
- amazon-market-entrySkill
- amazon-mining-researchSkill
- amazon-pricing-signalsSkill
- amazon-reorder-planningSkill
- amazon-seller-centralSkill
- amazon-sp-campaign-launcherSkill
- bling-erpSkill
- fba-inventory-risk-dashboardSkill
- listing-create-publishSkill
- olist-tiny-erpSkill
- search-term-harvest-dashboardSkill
- super-listing-powerSkill
- titanos-ads-quickstartSkill
- titanos-mcp-setupSkill
- wasted-ad-spend-dashboardSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 2 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 11
Use esta skill quando o usuário / Use this skill when the user:
- Very specific: line 20
Use esta skill para qualquer mutação Amazon Ads com create_resources, update_resources ou delete_resources.
- Distinctive: line 44
Use no máximo 5 itens por batch.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Amazon Ads Write Recovery — Titanos MCP
Quando usar / When to Use This Skill
Use esta skill quando o usuário / Use this skill when the user:
- Is applying Ads mutations and a write failed mid-way
- Needs dry-run, idempotency, or readback before/after writes
- Wants to avoid duplicate campaigns or recover a partial write
Objetivo
Evitar que agentes dupliquem campanhas, keywords, targets ou product ads quando um write via Titanos MCP falha no meio.
Use esta skill para qualquer mutação Amazon Ads com create_resources, update_resources ou delete_resources.
Regra principal
Depois de erro em write, nunca reexecute o mesmo lote às cegas.
Faça readback primeiro. Erro 502/timeout pode acontecer depois de a Amazon ter criado parte dos recursos.
Antes do write
- Confirmar conta:
connection_idprofile_id- marketplace
- Confirmar escopo/schemas:
list_resource_typestools/listse disponível
- Rodar
dry_run: true. - Mostrar payload e impacto ao usuário.
- Receber confirmação explícita.
- Executar
dry_run: falseem lotes pequenos.
Lote seguro
Use no máximo 5 itens por batch.
Exemplo de idempotency keys:
bkza-mocho-20260705-campaigns-1
bkza-mocho-20260705-adgroups-1
bkza-mocho-20260705-productads-1
bkza-mocho-20260705-keywords-1
bkza-mocho-20260705-targets-1
bkza-mocho-20260705-negatives-1Não reutilize a mesma idempotency_key com payload diferente. Se precisar mudar payload, use nova chave e faça readback antes.
Sequência de criação SP recuperável
| Etapa | Write | Readback |
| 1 | sp_campaigns | get_campaigns por nome/ID |
| 2 | sp_ad_groups | get_ad_groups por campaign/ad group |
| 3 | sp_product_ads | get_product_ads por campaign/ad group |
| 4 | sp_keywords | get_targets / target listing por campaign/ad group |
| 5 | sp_targets | get_targets por campaign/ad group |
| 6 | negativos | get_negatives |
Como lidar com erro
Caso 1: INTERNAL_ERROR (502) ou timeout
Ação:
- Pare.
- Faça readback por nome/ID exato.
- Compare o plano com o que já existe.
- Continue apenas os recursos faltantes.
- Registre o erro real para o dev.
Nunca diga "não criou nada" sem readback.
Caso 2: IDEMPOTENCY_CONFLICT (409)
Causa:
- mesma
idempotency_keyusada com payload diferente.
Ação:
- Readback do estado atual.
- Gerar nova
idempotency_keypara o payload corrigido. - Criar só o que falta.
Caso 3: VALIDATION_ERROR (400)
Ação:
- Ler erro de campo/caminho.
- Comparar com schema do
list_resource_types. - Confirmar se payload do MCP precisa ser flat ou nested.
IMPORTANTE — update_resources exige wrapper changes:
O payload de update deve ter a estrutura:
{
"resource_type": "sp_keywords",
"resources": [
{
"keyword_id": "<keyword_id>",
"changes": {
"bid": 2.0
}
}
],
"dry_run": true
}NÃO passe campos soltos (bid, state) no nível do resource — eles devem estar dentro de changes. Passar bid solto causa VALIDATION_ERROR (400).
O mesmo padrão vale para sp_campaigns (changes: { daily_budget, state, name }) e sp_targets (changes: { bid, state }).
Exemplos reais de formato correto:
update_resources sp_campaigns:
{ campaign_id: "<campaign_id>", changes: { daily_budget: 65 } } → ✅
{ campaign_id: "<campaign_id>", changes: { state: "PAUSED" } } → ✅
{ campaign_id: "<campaign_id>", changes: { name: "TEST" } } → ✅
update_resources sp_keywords:
{ keyword_id: "<keyword_id>", changes: { bid: 1.55 } } → ✅
{ keyword_id: "<keyword_id>", changes: { state: "PAUSED" } } → ✅
update_resources sp_targets:
{ target_id: "<target_id>", changes: { bid: 1.55 } } → ✅
{ target_id: "<target_id>", changes: { state: "PAUSED" } } → ✅Outros exemplos de validação:
sp_campaigns:start_dateprecisa ISOYYYY-MM-DD.sp_product_ads: Amazon exigesku; ASIN sozinho pode falhar.sp_keywords: usekeyword_text+match_type, não expression de target.sp_targets: useexpressioncomASIN_SAME_AS, não keyword.
Caso 4: RESOURCE_NOT_FOUND (404)
Possíveis causas:
- campaign/ad group ID não existe ou ainda não propagou.
- ad group pertence a outra campanha/profile.
- ASIN target inválido para marketplace.
- recurso criado mas readback ainda está atrasado.
Ação:
- Readback de campaign.
- Readback de ad group.
- Aguardar curto intervalo se acabou de criar.
- Validar ASIN/marketplace.
- Tentar 1 item isolado com nova idempotency key.
Checklist de recovery
Quando algo falhar, produza esta tabela:
| Recurso | Planejado | Criado | Faltante | Próxima ação |
| campaigns | 3 | 3 | 0 | ok |
| ad groups | 3 | 3 | 0 | ok |
| product ads | 6 | 6 | 0 | ok |
| keywords | 21 | 0 | 21 | corrigir/reexecutar |
| targets | 6 | 0 | 6 | corrigir/reexecutar |
| negativos | 16 | ? | ? | readback |
Modelo de mensagem para dev
Inclua sempre:
MCP version:
resource_type:
dry_run:
idempotency_key:
connection_id:
profile_id:
payload mínimo que falhou:
retorno bruto:
readback depois do erro:Exemplo:
create_resources sp_keywords falha no write real.
Dry-run OK.
Payload:
{ ... }
Retorno: INTERNAL_ERROR (502)
Readback: keyword não apareceu no ad group.Modelo de resposta para usuário
Se parcial:
Parcialmente criado:
- campaigns: 3/3
- ad groups: 3/3
- product ads: 6/6
Pendente por erro backend:
- keywords: 0/21
- targets: 0/6
Ação: enviei payload/erro para dev; vou continuar só dessas etapas quando corrigido.Se concluído:
Concluído e verificado:
- campaigns: 3
- ad groups: 3
- product ads: 6
- keywords: 21
- targets: 6
- negativos: 16
Budget diário máximo: R$120Anti-padrões
- Repetir batch inteiro depois de 502.
- Usar mesma idempotency key com payload diferente.
- Criar product ads sem SKU.
- Continuar para keywords antes de confirmar product ads.
- Dizer que criou sem readback.
- Misturar profile/marketplace.
- Fazer write sem aprovação explícita.
- Passar campos soltos no
update_resourcessem wrapperchanges.
Status por versão (testado 2026-07-06, MCP 1.42.2 pós-fix)
update_resources — ✅ funcionando
Corrigido em 2026-07-06. O bug era duplo:
id_fieldno registry estavatarget_idem vez dekeyword_idparasp_keywords— corrigido.- Schema Zod estava
.strict()rejeitando campos extras — corrigido para.passthrough(). - Payload precisa do wrapper
changes— isso é by design, não bug.
delete_resources — ✅ funciona para sp_keywords
Confirmado em produção: keywords deletadas com sucesso usando:
{ "keyword_id": "<keyword_id>" }Reports com days — ✅ funciona (assíncrono)
Os reports com days retornam status PENDING e geram o relatório em background (~45-120s). Não é mais 502.
Também funcionam com start_date/end_date no formato YYYY-MM-DD.
ask_ads_report_analyst — ⚠️ scope sensitivity
- ✅ Funciona sem
connection_id/profile_id(usa default da org) - ❌ Falha com
connection_id+profile_id(retornaVALIDATION_ERROR (400))
list_ads_recommendations — ✅ funcionando (graceful)
Corrigido em 2026-07-06. Se a Amazon retorna 403 (comum em contas BR), o endpoint retorna [] com nota explicativa em vez de 502.
get_bid_guidance — ✅ funcionando
Corrigido em 2026-07-06. A Amazon exigia o campo strategy no payload. Agora o campo é enviado com default CONVERSION_OPPORTUNITIES.
Pode retornar suggested_bid: null para keywords sem histórico suficiente — isso é normal, não bug.
DSP — ❌ requer conta agency
Todas as funções DSP retornam erro para contas seller. DSP requer perfil agency.
get_targets para PAT — ⚠️
get_targets retorna keywords[] corretamente para campanhas KW, mas targets[] vem vazio para campanhas PAT mesmo quando o create retorna DUPLICATE_VALUE (provando que o target existe). O bug pode ser no filtro adGroupIdFilter do endpoint /sp/targets/list.
create_resources sp_product_ads — formato correto
✅ Funciona: { campaign_id, ad_group_id, sku, state }
✅ Funciona: { campaign_id, ad_group_id, asin, state }
✅ Funciona: { campaign_id, ad_group_id, sku, asin, state }
❌ Falha: { campaignId, adGroupId, sku, state } (camelCase)Usar sempre snake_case nos payloads de create.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

