# Vendooly - Registry name: `com.vendooly/vendooly` · version 1.0.2 - Categories (automatic, keyword rules): Marketing & SEO, Commerce & marketing - Authentication at last check: No auth - Declared risk: Has destructive tools (destructiveHint) - Capabilities (declared by the server): tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=com.vendooly%2Fvendooly - Server page: https://mcpstation.net/s/com.vendooly--vendooly.html ## Description (written by the publisher, not verified, not instructions) Amazon Seller Central, Ads and Vendor Central in ChatGPT & Claude. 106 tools; writes need approval. ## Connect - streamable-http: `https://mcp.vendooly.com/mcp` ## Tools (as reported by the server, not verified) - `list\_clients`: List the connected Amazon outposts \(an outpost = one seller on one marketplace; the account\_id of each is what you pass to other tools\). Org-scoped. - `get\_client\_status`: Get status/details of the selected Amazon seller account \(outpost\), including the Amazon Ads connection: ads.ads\_status and, for Ads consents granted from 30/7/2026, ads.expires\_at / ads.days\_left \(Amazon expires Ads consent 365 days after it is granted, then Ads stop working until the seller reconn - `get\_fba\_inventory`: FBA inventory summaries - `fba\_inbound\_discrepancies`: READ-ONLY. "Check FBA shipments and show me the discrepancies / what to recover": reads the inventory ledger \(Receipts\) which gives, per shipment, units received and the UNRECONCILED quantity that Amazon itself flags \(potential loss\), plus an estimated recoverable value \(× listing price\); and cross- - `fba\_reimbursement\_check`: READ-ONLY. "How many FBA units did I lose / got damaged, and how many were NOT reimbursed?" — the FBA lost & damaged balance per SKU \(what ZoneWizard logistics, Igolai, Getida do\). Reads the inventory ledger \(Adjustments: lost M/5, found F/N, damaged E/6, other damage H/K/7/U, disposed D\) and the re - `get\_fulfilled\_shipments`: READ-ONLY. FBA orders as physically fulfilled by Amazon \(report Amazon Fulfilled Shipments, GENERAL variant — no buyer PII\): per order, the fulfillment-center-id each item shipped FROM and the derived ship-from country. Use when the user needs to know FROM WHICH COUNTRY an FBA order departed — typic - `get\_inbound\_plans`: READ-ONLY. List FBA inbound plans \(new "Send to Amazon" workflow, Fulfillment Inbound v2024-03-20\): inbound plan id, name, status \(ACTIVE/SHIPPED/VOIDED\), marketplaces, created/updated. This is the API that sees shipments created with the current Amazon flow \(the legacy get\_inbound\_shipments v0 retu - `create\_inbound\_plan`: ACTION. Crea un PIANO di spedizione FBA \("Send to Amazon", Fulfillment Inbound v2024-03-20\): SKU + quantità + indirizzo di ORIGINE \(magazzino/fornitore del seller\). È il PASSO 1 del flusso: il piano nasce come bozza modificabile, NON parte nessuna spedizione. SEQUENZA COMPLETA \(guida l'utente passo- - `get\_inbound\_plan`: READ-ONLY. Dettaglio di UN piano inbound FBA v2024 \(stato, indirizzo origine, righe SKU con quantità/prep/label\). Con operation\_id \(invece di inbound\_plan\_id\) fa il polling di un'operazione asincrona pendente \(create/generate/confirm\) e ne ritorna stato + problemi. Per l'ELENCO dei piani usa get\_inb - `generate\_inbound\_options`: ACTION \(bozze non vincolanti\). Genera E elenca in una sola chiamata le opzioni del piano inbound FBA: kind:"packing" = opzioni di imballo \(packing groups\); kind:"placement" = opzioni di DESTINAZIONE con split tra centri Amazon e FEE per opzione \(inbound placement fee vs Amazon-optimized\) — mostra SE - `confirm\_inbound\_option`: ACTION. Conferma un'opzione del piano inbound FBA scelta dall'utente. kind:"packing" + packing\_option\_id = fissa l'imballo \(poi servono le scatole: set\_packing\_information\). kind:"placement" + placement\_option\_id = IMPEGNO VERO: le spedizioni vengono CREATE con lo split e le fee di quell'opzione \(ri - `set\_packing\_information`: ACTION. Registra le SCATOLE del piano inbound FBA \(dopo il packing confermato\): per ogni packing group, le scatole con dimensioni in CM, peso in KG, quantità di scatole identiche e contenuto \(SKU+quantità per scatola, salvo content\_source diverso\). Passo obbligatorio PRIMA di generare le opzioni di - `cancel\_inbound\_plan`: ACTION. Annulla un piano inbound FBA v2024 non ancora spedito \(torna VOIDED\). Usalo per i ripensamenti su un piano creato per errore o non più necessario. Chiedi conferma esplicita all'utente prima di chiamare. - `update\_mfn\_quantity`: Update MFN inventory quantity for a SKU - `check\_feed\_status`: Stato di elaborazione di un feed \(es. quelli restituiti da bulk\_delete\_listings\). Amazon lavora i feed in modo asincrono: IN\_QUEUE/IN\_PROGRESS = ancora in corso, richiama fra un po'. Quando è DONE la risposta porta GIÀ l'esito letto: \`summary\` con quante righe Amazon ha processato/accettato/rifiutat - `get\_orders`: List individual orders \(last N days\): order ids, status, dates and totals only — no buyer data. Live Amazon Orders API, throttled \(≈1 req/min\): use ONLY when you need order-level rows. For daily sales/orders charts or trends over a period use get\_daily\_sales; for a single revenue total use get\_reven - `get\_order\_items`: Items for a specific order - `get\_fba\_customer\_returns`: READ-ONLY. Detailed physical FBA customer returns from GET\_FBA\_FULFILLMENT\_CUSTOMER\_RETURNS\_DATA: SKU, ASIN, return date, quantity, original reason, detailed\_disposition, status, fulfillment center and customer\_comments. Use for damaged returns \(DAMAGED\_BY\_FC/DAMAGED\_BY\_CARRIER\), incompatibility \(NO - `fiscal\_transactions\_export`: READ-ONLY. Fiscal transactions file for the accountant \(VAT/OSS support\): one row per order item for sales \(VENDITA\), refunds \(RIMBORSO\), A-to-Z claims and chargebacks, with Amazon posted date, marketplace, order id, SKU, quantity, currency, ship-to country, B2B flag \(Amazon Business order\), net pri - `get\_epr\_report`: READ-ONLY. Amazon EPR \(Extended Producer Responsibility\) report for one seller outpost and one CLOSED calendar period, from SP-API GET\_EPR\_MONTHLY\_REPORTS / GET\_EPR\_QUARTERLY\_REPORTS / GET\_EPR\_ANNUAL\_REPORTS \(Product Listing role, sellers only\). Returns a summary per ship-to country and EPR category - `audit\_catalog\_quality`: Run catalog quality audit - `create\_listing`: Crea/sostituisce una listing \(PUT\). product\_data accetta campi SEMPLICI auto-mappati nel formato attributi SP-API: title, brand, price, quantity, condition, ean/upc/gtin, description, bullets\[\]. Per agganciare un'offerta a un ASIN GIA' a catalogo usa requirements:"LISTING\_OFFER\_ONLY" + asin \(NON ser - `update\_listing`: Modifica una listing esistente. SHORTCUT amichevoli \(consigliati — costruiscono la struttura attributo corretta, niente schema SP-API a mano\): bullets:\[...\] → bullet\_point \("Funzionalità principali", la leva dei punti-elenco su amazon.it/EU, fino a 5 \~100 char l'uno\), title → item\_name, shipping\_tem - `get\_listing`: Fetch one listing \(summaries, issues, offers, fulfillment availability\). Pass include\_data:\["attributes"\] for the full attribute set. - `delete\_listing`: Delete a listing - `bulk\_delete\_listings`: Cancella offerte IN BLOCCO su un account, filtrando per canale di gestione. USA QUESTO, non delete\_listing in ciclo, quando le offerte da eliminare sono più di qualche decina: delete\_listing va SKU per SKU e sul rate limit di Amazon migliaia di SKU non finiscono mai, mentre qui si spediscono in feed - `search\_catalog`: Search the Amazon catalog. IMPORTANT: use identifiers \(ASIN/EAN/ISBN\) for reliable, compact results. Keyword search returns up to 10 items \(summaries only\) and may be incomplete — prefer identifiers when you know the ASIN or EAN. - `get\_product\_types`: Get product type definition. product\_type is REQUIRED \(e.g. PUZZLE, SAFETY\_AND\_HEALTH, LUGGAGE\). By default fetches the JSON Schema server-side and returns allowed enum values per attribute \(attribute\_enums\) + required\_attributes — no need to open the S3 link. The schema is personalised for the sele - `list\_my\_products`: List own products from local cache \(SKU, ASIN, title, price, stock FBA+MFN, fulfillment channel, velocity = avg units/day last 30d, days\_cover = stock/velocity — paginated, default 50 rows, no customer data\). Use velocity/days\_cover for stock-out risk \("sells 3.2/day, runs out in \~4 days"\). Filter c - `get\_my\_catalog\_detail`: Catalog detail from local cache - `get\_catalog\_item`: Live SP-API catalog item lookup - `get\_competitive\_pricing`: READ-ONLY. Buy Box / Featured Offer price per ASIN \(max 20 per Amazon call, auto-batched\). Returns buy\_box\_price \(listing\) + buy\_box\_landed\_price \(incl. shipping\), condition, whether you win the Buy Box, and source. Falls back to live offers when Amazon has no competitive price, so it returns far fe - `get\_buybox\_prices`: READ-ONLY. BULK Buy Box / Featured Offer export for a LIST of ASINs \(up to 100\). Returns a clean table per ASIN: buy\_box\_price \(all-in for the customer\), lowest\_price, offer\_count, whether you win the Buy Box, FBA/FBM of the winner, and a reason when there is no Buy Box \(suppressed / no offers\). Use - `get\_my\_pricing`: Your own pricing per SKU - `get\_fee\_estimate`: Estimate Amazon fees \(referral + FBA + variable closing\) and net proceeds for a given selling price, via the official Amazon Product Fees API \(getMyFeesEstimate\). Pass asin OR sku, the price, currency and fulfillment\_channel \(FBA default, or FBM\). Returns referral\_fee, fba\_fee, closing\_fee, total\_fe - `update\_price`: Update price for a SKU - `bulk\_update\_prices`: Bulk price updates - `bulk\_update\_inventory`: Bulk inventory updates - `bulk\_update\_listings`: Bulk listing attribute updates \(title, bullet\_point, any patch\). updates: \[\{sku, title?, bullets?: string\[\], patches?: \[...\], product\_type?, validate\_only?\}\]. product\_type is optional: each SKU's product type is read from its listing \(results\[\].product\_type\_used\). Use when you need to update titles - `bulk\_set\_shipping\_template`: Assegna lo STESSO modello di spedizione \(merchant\_shipping\_group\) a molti SKU in una volta, con un feed JSON\_LISTINGS\_FEED \(fino a 5.000 SKU per chiamata, un feed\) invece di update\_listing SKU per SKU. shipping\_template = ID o nome come in Seller Central \(elenco: get\_product\_types product\_type="PROD - `get\_account\_health`: READ-ONLY. Account Health of ONE seller account on ONE marketplace \(outpost\), read from Amazon's official seller performance report \(GET\_V2\_SELLER\_PERFORMANCE\_REPORT, same data as Seller Central → Account Health\): seller account status \(NORMAL/AT\_RISK/DEACTIVATED\), Account Health Rating status \(GREA - `check\_listing\_restrictions`: READ-ONLY. Gated products: BEFORE listing or buying stock, tells whether THIS seller account can sell each ASIN on the outpost's marketplace \(or other marketplaces of the same region\) in a given condition, using Amazon's Listings Restrictions API \(getListingsRestrictions\). Per ASIN: libero \(no restr - `get\_listing\_issues`: READ-ONLY. Issue Amazon di SKU SPECIFICI \(una chiamata SP-API per SKU\): usalo quando l'utente nomina 1-20 SKU. Per la domanda "quali dei miei articoli NON sono in vendita / sono bloccati / soppressi e perché" NON usare questo in loop: usa list\_inactive\_listings, che copre tutto il catalogo con una c - `list\_inactive\_listings`: READ-ONLY. Elenco CATALOGO-WIDE dei listing che NON sono in vendita, CON IL MOTIVO — la risposta a "quali prodotti sono inattivi/bloccati/soppressi?", "cosa mi ha bloccato Amazon dopo il caricamento?", "perché questo articolo non si vende?". Legge lo stato reale della Listings Items API \(BUYABLE / D - `audit\_title\_compliance`: Audit all listings for Amazon title limit \(75 chars, enforced from July/August 2026 — i titoli non conformi vengono RISCRITTI dall'IA di Amazon, solo i brand registrati hanno 14 giorni di review\). Returns titles over the limit with excess character count + bullet/highlight counts per SKU, più la fas - `plan\_title\_seo\_fix`: Titolo conforme SENZA perdere SEO, passo 1 \(solo lettura\): per ogni SKU accorcia il titolo a 72 caratteri \(o usa new\_titles\), calcola le parole di ricerca perse e le ricolloca in generic\_keyword \(≤250 byte, niente doppioni\); quello che non entra va come frase presa pari pari dal titolo vecchio in co - `apply\_title\_seo\_batch`: Titolo-SEO, passo 2 \(SCRITTURA\): applica un lotto del piano \(solo SKU ready\). Primo lotto dell'outpost max 2 SKU, poi max 50; prima di ogni lotto rilegge il precedente e si ferma se non risulta applicato. Ogni SKU viene riletto dal vivo: se la listing è cambiata dall'anteprima non si scrive. Salva i - `title\_seo\_status`: Titolo-SEO: stato per l'outpost \(ultimo piano con i conteggi, ultimi lotti con esito, verificato, annullabile\). - `title\_seo\_rollback`: Titolo-SEO \(SCRITTURA\): rimette titolo, generic\_keyword, bullet e descrizione com'erano prima di un lotto, dal registro. - `audit\_compliance`: Audit compliance/GPSR del catalogo \(EU/IT\). Per ogni SKU verifica gli attributi compliance REALI del suo product type \(schema-aware\): manufacturer, rtip\_manufacturer\_contact\_information \(contatto fabbricante\), country\_of\_origin, safety\_warning, safety\_data\_sheet\_url e — dove il product type li preve - `update\_item\_highlights`: Update Item Highlights on a listing. L'attributo UFFICIALE è title\_differentiation \(max 125 char, rollout titoli modulari 27/7/2026\); item\_highlights è il nome legacy visto su alcuni schema US — il tool risolve da solo quale espone lo schema del product type e scrive su quello. ATTENZIONE: non tutti - `audit\_aplus\_coverage`: READ-ONLY. Copertura A+ Content del catalogo: quali ASIN hanno un documento A+ APPROVED \(= visibile al cliente\) e quali no, con i buchi ORDINATI per peso commerciale \(unità vendute a 30 giorni\) — quindi "quali pagine che vendono davvero sono senza A+". Segnala anche i documenti REJECTED \(lavoro già - `list\_aplus\_documents`: READ-ONLY. Elenco dei documenti A+ Content del seller su questo marketplace, con stato \(DRAFT \| SUBMITTED \| APPROVED \| REJECTED\), badge e data di aggiornamento. Solo APPROVED è visibile al cliente. Per la domanda "quanto del mio catalogo ha A+" usa audit\_aplus\_coverage, non questo. - `get\_aplus\_document`: READ-ONLY. Dettaglio di UN documento A+ \(stato, badge, ASIN associati, tipi di modulo\). content\_reference\_key si prende da list\_aplus\_documents o audit\_aplus\_coverage. include\_content=true restituisce anche i moduli completi. NB: i moduli A+ sono TIPIZZATI \(STANDARD\_TEXT, STANDARD\_COMPARISON\_TABLE, - `get\_dashboard\_data`: Read-only aggregated KPI summary for this account \(listing counts, 7d revenue total, issue count\). Aggregates only, no customer data. - `get\_all\_dashboards`: Read-only aggregated KPI summary across all accounts in the org \(aggregates only, no customer data\) - `generate\_vendor\_oauth\_link`: Vendor Central OAuth link - `get\_vendor\_purchase\_orders`: Vendor POs - `get\_vendor\_purchase\_order\_details`: Vendor PO details - `get\_vendor\_po\_summary`: Vendor PO aggregate summary - `get\_vendor\_invoices`: Vendor invoices — SP-API non espone un endpoint di lettura per le fatture vendor retail \(solo POST submitInvoices\). Questo tool restituisce una spiegazione della limitazione e rimanda a get\_vendor\_remittances per gli importi stimati e a Vendor Central per le fatture reali. - `get\_vendor\_remittances`: Vendor: importi stimati dai PO \(SP-API non espone remittance reali in lettura\) - `ads\_list\_profiles`: List Amazon Ads profiles for this account - `ads\_list\_portfolios`: List Amazon Ads portfolios \(groups of campaigns with optional shared budget\) - `ads\_create\_portfolio`: Create an Amazon Ads portfolio to group campaigns \(no portfolio-level budget cap; campaigns can then be assigned to it\). Same scope as campaigns — no extra authorization needed. - `ads\_list\_sp\_campaigns`: LIVE: stato corrente delle campagne SP. Campi chiave per campagna: name, campaignId, state, targetingType \(AUTO\|MANUAL\) e daily\_budget = budget giornaliero NUMERICO nella valuta del marketplace \(es. 50, 150\). NON esiste un "bid" a livello campagna \(i bid sono su keyword/target\). Usa per VERIFICARE p - `ads\_create\_sp\_campaign`: Create a SP campaign. campaign.targeting\_type: "AUTO" \(Amazon sceglie automaticamente i target — NON aggiungere keyword/target manuali; per modulare i bid dei 4 gruppi auto usa ads\_create\_sp\_product\_targets con auto\_match\) oppure "MANUAL" \(default; poi attacchi keyword via ads\_create\_sp\_keywords o A - `ads\_update\_sp\_campaign`: Aggiorna una o PIÙ campagne SP. SINGOLA: campaign\_id + patches \(patches.daily\_budget numero → convertito nel payload v3 budget\{budgetType:DAILY,budget\}; patches.state ENABLED\|PAUSED; patches.placement\_bidding = MOLTIPLICATORI per placement \[\{placement, percentage 0-900\}\] con placement PLACEMENT\_TOP\| - `ads\_list\_sp\_audiences`: READ-ONLY. Elenca i SEGMENTI DI PUBBLICO utilizzabili per i moltiplicatori di bid delle campagne Sponsored Products \(audience bid adjustments, disponibili in IT/DE/FR/ES/UK\). source: "amazon" \(default: pubblici costruiti da Amazon, es. chi ha già comprato dal brand, chi ha cliccato o messo nel carre - `ads\_update\_sp\_audience\_bidding`: Imposta i MOLTIPLICATORI PER SEGMENTO DI PUBBLICO di UNA campagna Sponsored Products \(dynamicBidding.shopperCohortBidding\): aggiunge o modifica \(set=\[\{audience\_id, percentage\}\]\), toglie \(remove=\[audience\_id\]\) o azzera tutto \(clear\_all=true\). percentage = aumento % del bid, INTERO 0-900: i segmenti p - `ads\_delete\_sp\_campaign`: Archivia \(elimina\) una o più campagne SP. È l'UNICO modo di archiviare una campagna: ads\_update\_sp\_campaign accetta solo ENABLED\|PAUSED \(Amazon rifiuta ARCHIVED sul PUT\). IRREVERSIBILE — una campagna archiviata non si riattiva, va ricreata. campaign\_ids: \[id, ...\]. - `ads\_list\_sp\_ad\_groups`: Read-only list of Sponsored Products ad groups \(id, name, state, default bid\) - `ads\_create\_sp\_ad\_group`: Create a SP ad group in an existing campaign. Defaults to PAUSED so it can be populated before delivery. IMPORTANTE — un ad group è O keyword-targeted O product-targeted, MAI entrambi: Amazon RIFIUTA \(otherError\) una keyword in un ad group che ha già product target, e viceversa. Quindi se ti servono - `ads\_update\_sp\_ad\_group`: Update a SP ad group - `ads\_list\_sb\_campaigns`: LIVE: stato corrente delle campagne Sponsored Brands \(SB\) ESISTENTI \(create da Amazon Ads console — Vendooly non crea ancora campagne SB nuove, serve brandEntityId/Brand Registry/asset creativi/moderazione, non implementato\). Campi chiave: name, campaignId, state \(ENABLED\|PAUSED\|ARCHIVED\), daily\_bud - `ads\_update\_sb\_campaign`: Aggiorna una o PIÙ campagne Sponsored Brands \(SB\) ESISTENTI: budget giornaliero, stato \(ENABLED\|PAUSED\) e OTTIMIZZAZIONE DELL'OFFERTA. Per ottimizzare senza tagliare volume NON strozzare il budget: usa i moltiplicatori per posizionamento con patches.bid\_adjustments\_by\_placement=\[\{placement, percenta - `ads\_list\_sb\_ad\_groups`: Read-only: elenco ad group Sponsored Brands \(SB\) — id, nome, stato \(ENABLED\|PAUSED\|ARCHIVED\), campagna di appartenenza. Filtra con campaign\_id\_filter. - `ads\_update\_sb\_ad\_group`: Aggiorna un ad group Sponsored Brands \(SB\) ESISTENTE \(es. stato ENABLED\|PAUSED\). NON crea ad group nuovi. - `ads\_list\_sb\_keywords`: LIVE: keyword Sponsored Brands \(SB\) con BID e stato ATTUALI — la lettura da fare prima di riofferire su SB. Filtra con campaign\_id/ad\_group\_id. NON ritorna performance: per spesa/vendite/ACoS usa execute\_sql su fact\_keyword\_daily. Elenco vuoto = quel brand non ha keyword SB \(tipico se le campagne SB - `ads\_update\_sb\_keyword\_bid`: Aggiorna il BID di una o PIÙ keyword Sponsored Brands. È la leva per OTTIMIZZARE una campagna SB invece di spegnerla o strozzarne il budget. keyword\_id si ottiene da ads\_list\_sb\_keywords. SINGOLA: keyword\_id + bid. BATCH \(consigliato\): items=\[\{keyword\_id, bid\}\], MAX 25. Esito verificato per-id \(read - `ads\_update\_sb\_keyword\_state`: Aggiorna lo stato \(ENABLED\|PAUSED\|ARCHIVED\) di una o PIÙ keyword Sponsored Brands. SINGOLA: keyword\_id + state. BATCH: items=\[\{keyword\_id, state\}\], MAX 25. Esito verificato per-id. - `ads\_list\_sb\_targets`: LIVE: product target Sponsored Brands \(ASIN/categoria/brand\) con BID e stato ATTUALI. Il target\_id serve per ads\_update\_sb\_target\_bid. NON ritorna performance: usa execute\_sql sul data-hub. Elenco vuoto = nessun target SB su questo profilo: dillo, NON inventare target. - `ads\_update\_sb\_target\_bid`: Aggiorna il BID di uno o PIÙ product target Sponsored Brands. Insieme a ads\_update\_sb\_keyword\_bid e ai moltiplicatori per posizionamento di ads\_update\_sb\_campaign è il modo per OTTIMIZZARE SB \(invece di limitarsi a spegnere o tagliare il budget\). target\_id da ads\_list\_sb\_targets. SINGOLA: target\_id - `ads\_update\_sb\_target\_state`: Aggiorna lo stato \(ENABLED\|PAUSED\|ARCHIVED\) di uno o PIÙ product target Sponsored Brands. SINGOLA: target\_id + state. BATCH: items=\[\{target\_id, state\}\], MAX 25. Esito verificato per-id. - `ads\_list\_sd\_campaigns`: LIVE: campagne Sponsored Display \(SD\) ESISTENTI — name, campaignId, state \(enabled\|paused\|archived\), budget giornaliero, tactic \(T00020 contestuale \| T00030 audiences\), costType \(cpc\|vcpm\), bidOptimization. Vendooly non CREA campagne SD \(servono audiences/creatives/Brand Registry\): legge e aggiorna - `ads\_update\_sd\_campaign`: Aggiorna una o PIÙ campagne Sponsored Display ESISTENTI: budget giornaliero e/o stato \(enabled\|paused\). SINGOLA: campaign\_id + daily\_budget/state. BATCH: items=\[\{campaign\_id, daily\_budget?, state?\}\], MAX 25. Esito verificato per-id \(read-after-write\). NON crea campagne SD. - `ads\_list\_sd\_ad\_groups`: Read-only: ad group Sponsored Display — id, nome, stato, campagna di appartenenza e defaultBid \(l'offerta dell'ad group, la leva di ottimizzazione SD\). Filtra con campaign\_id\_filter. - `ads\_update\_sd\_ad\_group`: Aggiorna uno o PIÙ ad group Sponsored Display: BID \(defaultBid\) e/o stato \(enabled\|paused\). Su SD il bid dell'ad group è la leva principale di ottimizzazione. SINGOLA: ad\_group\_id + bid/state. BATCH: items=\[\{ad\_group\_id, bid?, state?\}\], MAX 25. Esito verificato per-id. - `ads\_list\_sp\_keywords`: LIVE: keyword SP con bid e stato ATTUALI — per agire o verificare. NON ritorna performance: per spesa/vendite/ACoS o keyword che sprecano usa execute\_sql su fact\_keyword\_daily. - `ads\_create\_sp\_keywords`: Create SP keywords. L'ad group bersaglio deve essere keyword-targeted: se ha GIÀ product target Amazon rifiuta con otherError \(un ad group è keyword O product, mai entrambi\) → in quel caso crea un ad group dedicato alle keyword. Ogni keyword: \{ campaign\_id, ad\_group\_id, keyword\_text, match\_type \(BRO - `ads\_update\_sp\_keyword\_bid`: Aggiorna il bid di una o PIÙ keyword SP. SINGOLA: keyword\_id + bid. BATCH \(consigliato per agire su molte keyword in una volta — meno chiamate, niente raffica\): items=\[\{keyword\_id, bid\}\], ogni keyword può avere un bid diverso, MAX 25 per chiamata. Esito verificato PER-ID \(read-after-write\). - `ads\_update\_sp\_keyword\_state`: Aggiorna lo stato \(ENABLED/PAUSED\) di una o PIÙ keyword SP. SINGOLA: keyword\_id + state. BATCH: items=\[\{keyword\_id, state\}\], MAX 25 per chiamata. Esito verificato PER-ID. - `ads\_list\_sp\_negative\_keywords`: List SP negative keywords - `ads\_create\_sp\_negative\_keywords`: Create SP negative keywords - `ads\_delete\_sp\_negative\_keywords`: Delete SP negative keywords - `ads\_list\_sp\_product\_ads`: READ-ONLY LIVE. Elenco SP completo di default \(all\_pages=true\), con ASIN/SKU, stato, nomi e stati di campagna e gruppo. Filtri esatti. all\_pages=false legge una pagina Amazon: continuare con next\_token anche se vuota dopo i filtri ASIN/SKU. Per trovare tutti gli ASIN scoperti usare ads\_catalog\_cover - `ads\_catalog\_coverage`: READ-ONLY. Tutti gli ASIN del catalogo e delle vendite recenti di un outpost, uno per uno, con SKU, titolo, stock, vendite e copertura Sponsored Products LIVE. Incrocia tutte le Product Ads e gli stati campagna/gruppo. Nessun campionamento; dati incompleti o obsoleti producono errore, mai falsi scop - `ads\_update\_sp\_product\_ad\_state`: Mette in pausa o riattiva \(ENABLED/PAUSED\) uno o PIÙ product ad SP, cioè il singolo ASIN/SKU sponsorizzato dentro un ad group, senza toccare campagna o ad group. ad\_id da ads\_list\_sp\_product\_ads. ARCHIVED non è ammesso \(irreversibile\). SINGOLA: ad\_id + state. BATCH: items=\[\{ad\_id, state\}\], MAX 25 pe - `ads\_create\_sp\_product\_ads`: Create SP product ads - `ads\_list\_sp\_targets`: List SP targeting clauses — SIA i target MANUAL \(ASIN/categoria\) SIA i 4 gruppi AUTO che Amazon genera da solo nelle campagne AUTO. Ogni clause ritorna il suo targetId, lo state e \(se impostato\) il bid. Mappatura gruppi AUTO \(expression.type → nome UI\): QUERY\_HIGH\_REL\_MATCHES=close-match, QUERY\_BROA Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html