CtrlK
BlogDocsLog inGet started
Tessl Logo
PluginPublic

kuudoai/kuudo-skills

22 Agent Skills for Amazon sellers and advertisers: Sponsored Products and Brands audits, search-term mining, budget pacing, DSP and Amazon Marketing Cloud, reporting, listing optimization and compliance, product images, repricing, FBA inbound, stockout, refunds, buyer messaging, and profitability. Built for Kuudo's hosted Amazon Ads and Selling Partner MCP servers; price, budget, listing, and shipment writes are previewed and wait for explicit approval.

68

1.65x
Quality

93%

Does it follow best practices?

Impact

66%

1.65x

Average score across 22 eval scenarios

SecuritybySnyk

Medium

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

step6a_create_ad.mdskills/amazon-ads-create-dsp-campaign/references/

Step 6a: Create Ad (Optional)

Tool: allv1_CreateAd

This step is optional. There are three paths:

  1. User provides creative details (asset IDs, creative sizes, etc.) → create the ad, then proceed to Step 6b.
  2. User provides an existing adId → skip this step, use the provided adId directly in Step 6b.
  3. User wants to defer creatives → skip both Step 6a and 6b, proceed to Step 7.

Create ads only from an approved plan: either the Gate 1 plan included these creative details, or you showed them afterwards (ad type, asset ID and version, sizes, callToAction URL, target ad groups) and got a yes.

Inputs

Collect from the user (when they opt to create ads):

InputFor ad typeRequiredNotes
assetIdALLYesAsset ID from the Asset Library (image for DISPLAY, video for VIDEO)
assetVersionALLYesAsset version string (e.g., version_v1)
creativeSizesDISPLAY onlyYesArray of {height, width} integers (e.g., 300x250)
adChoicesPositionDISPLAY onlyNoDefault: BOTTOM_RIGHT. Enum: TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT

Auto-derived (no user input needed):

FieldSource
adProductFIXED: "AMAZON_DSP"
adTypeDERIVED: "DISPLAY" for DISPLAY inventory, "VIDEO" for VIDEO_OLV / VIDEO_STV
nameDEFAULT: DSP|PB|Ad|{adType} yyyy-MM-dd_HH-mm-ss
stateFIXED: "PAUSED" (created paused like the campaign and ad groups, so nothing is live before Gate 2; Step 7 enables it)
marketplacesDERIVED: ["<marketplace>"] from Step 0
callToAction / callToActions URLDERIVED: https://www.amazon.com/dp/<ASIN> from Step 0 ASINs
deepLinkingBehaviorFIXED: "ENABLED"
products (VIDEO only)DERIVED: reuse the ASINs from Step 0
languageDERIVED: from marketplace — see locale table below

Required tool arguments

ArgumentWhereSource
Amazon-Ads-AccountIdheader (top-level tool arg)Step 1 (dspAdvertiserId)
ads[]body (top-level tool arg)One ad object per call — payloads below

Payload — DISPLAY inventory

{
  "Amazon-Ads-AccountId": "<dspAdvertiserId>",
  "ads": [
    {
      "adProduct": "AMAZON_DSP",
      "adType": "DISPLAY",
      "name": "<ad_name>",
      "state": "PAUSED",
      "marketplaces": ["<marketplace>"],
      "creative": {
        "displayCreative": {
          "standardDisplaySettings": {
            "adChoicesPosition": "<ad_choices_position>",
            "creativeSizes": [{"height": "<height>", "width": "<width>"}],
            "customImages": [
              {
                "assetId": "<asset_id>",
                "assetVersion": "<asset_version>",
                "formatProperties": [{"applyBorder": true}]
              }
            ],
            "language": "<language_from_marketplace>",
            "callToAction": {
              "clickToUrlDisplayCallToActionSettings": {
                "url": "https://www.amazon.com/dp/<ASIN>",
                "deepLinkingBehavior": "ENABLED"
              }
            }
          }
        }
      }
    }
  ]
}

Payload — STREAMING_TV inventory (VIDEO_STV)

{
  "Amazon-Ads-AccountId": "<dspAdvertiserId>",
  "ads": [
    {
      "adProduct": "AMAZON_DSP",
      "adType": "VIDEO",
      "name": "<ad_name>",
      "state": "PAUSED",
      "marketplaces": ["<marketplace>"],
      "creative": {
        "videoCreative": {
          "streamingTvSettings": {
            "videos": {"assetId": "<asset_id>", "assetVersion": "<asset_version>"},
            "language": "<language_from_marketplace>",
            "products": [{"productIdType": "ASIN", "productId": "<ASIN>"}],
            "callToActions": [
              {
                "clickToUrlVideoCallToActionSettings": {
                  "url": "https://www.amazon.com/dp/<ASIN>",
                  "deepLinkingBehavior": "ENABLED"
                }
              }
            ]
          }
        }
      }
    }
  ]
}

Payload — ONLINE_VIDEO inventory (VIDEO_OLV)

{
  "Amazon-Ads-AccountId": "<dspAdvertiserId>",
  "ads": [
    {
      "adProduct": "AMAZON_DSP",
      "adType": "VIDEO",
      "name": "<ad_name>",
      "state": "PAUSED",
      "marketplaces": ["<marketplace>"],
      "creative": {
        "videoCreative": {
          "onlineVideoSettings": {
            "videos": {"assetId": "<asset_id>", "assetVersion": "<asset_version>"},
            "language": "<language_from_marketplace>",
            "products": {"productIdType": "ASIN", "productId": "<ASIN>"},
            "callToActions": [
              {
                "clickToUrlVideoCallToActionSettings": {
                  "url": "https://www.amazon.com/dp/<ASIN>",
                  "deepLinkingBehavior": "ENABLED"
                }
              }
            ]
          }
        }
      }
    }
  ]
}

Note: streamingTvSettings.products is an array, onlineVideoSettings.products is a single object. This is a quirk in the v1 schema, not a typo — preserve the shapes exactly.

Language locale

Derive language from the user's marketplace country code. Format: {language}_{COUNTRY} (ISO-639 + ISO-3166).

MarketplaceLocale
US, CA, UK, AU, INen_US
DEde_DE
FRfr_FR
ES, MXes_ES
ITit_IT
NLnl_NL
SEsv_SE
JPja_JP
BRpt_PT
AE, SAar_AE
TRtr_TR

Response → extract

  • adId — used in Step 6b.

Verification (read-after-write)

After each allv1_CreateAd returns, wait 100ms then call allv1_QueryAd filtered by the new adId. Retry up to 3 × 1s on miss. Do not proceed to Step 6b until verification succeeds — Step 6b will reject an association against an adId it can't yet see.

On failure: stop and report the error and which ad-group context the ad was being created for.

skills

LICENSE.md

README.md

tile.json