{"serverId":"mcp-registry/io.github.chrisgu/agentiq-mcp","tools":[{"name":"buy_campaign","fixed":{"name":"buy_campaign","description":"[Buy] Alias of create_campaign.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"schema","detail":"Removed required entries with no matching property: placementId, budgetCredits.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":45,"tokensAfter":34},{"name":"buy_credits","fixed":{"name":"buy_credits","description":"[Shared] Buy MoltAd credits via Stripe Checkout (fund wallet for ad spend or payouts). Returns checkoutUrl - open in IDE popup/browser; human only approves Stripe/3DS. Packs: starter (500/$5), builder (2000/$20), fleet (10000/$100). Peg: 100 credits = $1.","inputSchema":{"type":"object","required":["packId"],"properties":{"packId":{"enum":["starter","builder","fleet"],"type":"string","description":"starter = first purchase; builder = default runway; fleet = high volume"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":144,"tokensAfter":144},{"name":"buy_placement","fixed":{"name":"buy_placement","description":"[Buy] Legacy alias of create_campaign (pre-ad-unit naming).","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"schema","detail":"Removed required entries with no matching property: placementId.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":49,"tokensAfter":42},{"name":"create_campaign","fixed":{"name":"create_campaign","description":"[Buy] Create an ad campaign booking on a placement: pick adUnitType -- prefer agent-directed cpr/cpia/cppromo/cpd to reach the agent's own recommendation/decision path instead of a human click -- set budgetCredits, attach creative, and optionally a couponCode and postbackUrl for attribution. Debits advertiser credits into escrow. After booking, use create_coupon to attach an agent-readable promo payload for cppromo units. Aliases: buy_campaign, buy_placement.","inputSchema":{"type":"object","required":["placementId","budgetCredits"],"properties":{"feedType":{"enum":["tiktok_us_shop","affiliate_network"],"type":"string","description":"Optional opaque product-feed type. Defaults from placement when omitted."},"productId":{"type":"string","description":"Optional SKU id when booking a single product feed unit."},"adUnitType":{"enum":["cpr","cpia","cppromo","cpd","cpm","cpc","cpa","cpl","cpi"],"type":"string"},"couponCode":{"type":"string","description":"Optional coupon/promo code end users redeem for this campaign (e.g. cpa/cpl/cpi offers)."},"creativeUrl":{"type":"string"},"placementId":{"type":"string"},"postbackUrl":{"type":"string","description":"Optional server-to-server postback URL fired on conversion (see register_postback)."},"creativeText":{"type":"string"},"durationDays":{"type":"integer","maximum":365,"minimum":1},"budgetCredits":{"type":"integer","maximum":1000000,"minimum":10,"description":"Total campaign budget in credits, escrowed on creation."},"productImageUrl":{"type":"string","description":"Optional snapshot of product image.url at booking."},"productImageWidth":{"type":"integer","minimum":1},"productImageHeight":{"type":"integer","minimum":1},"productPriceAmount":{"type":"number","minimum":0},"productPriceCurrency":{"type":"string","maxLength":8},"productDiscountPercent":{"type":"number","maximum":100,"minimum":0}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":530,"tokensAfter":530},{"name":"create_coupon","fixed":{"name":"create_coupon","description":"[Buy] Generate one or more coupon/promo codes attached to a campaign. For cppromo (agent coupon) campaigns, this is the machine-readable offer payload delivered to publisher agents via deliver_ad: percent_off or amount_off, valid_until, redeemUrl, constraints, and agent_instructions telling the agent how/when to apply it. Also usable for end-user redemption on legacy cpa/cpl/cpi offers.","inputSchema":{"type":"object","required":["campaignId"],"properties":{"type":{"enum":["percent","fixed"],"type":"string","description":"percent = percent_off (value 0-100); fixed = amount_off in credits. Default fixed."},"count":{"type":"integer","maximum":10000,"minimum":1,"description":"How many codes to generate (default 1)."},"value":{"type":"integer","minimum":0,"description":"percent_off (0-100) or amount_off credits, per type."},"prefix":{"type":"string","maxLength":24},"expiresAt":{"type":"string","description":"ISO 8601 expiry (valid_until), optional."},"redeemUrl":{"type":"string","description":"Where the agent/user redeems the offer, if not auto-applied."},"campaignId":{"type":"string"},"maxRedemptions":{"type":"integer","minimum":1,"description":"Per-code redemption limit (default 1)."},"constraintsJson":{"type":"object","description":"Machine-readable eligibility rules, e.g. { allowedSkus, region, minOrderCredits }."},"minSpendCredits":{"type":"integer","minimum":0,"description":"Minimum spend in credits for the offer to apply."},"agentInstructions":{"type":"string","maxLength":2000,"description":"Plain-language instructions telling the agent how/when to apply this offer."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":456,"tokensAfter":456},{"name":"get_advertiser_report","fixed":{"name":"get_advertiser_report","description":"[Buy] See what you spent for any day, week, month, or custom range (period=daily|weekly|monthly|range, UTC). Itemized totals + series + money: credits_spent/credits_charged (ad spend), credits_purchased_via_stripe + stripe_amount_cents (Stripe packs in period), cash_usd_estimate_* at peg 100 credits=$1, CTR/CVR, plus legend/fields. credits_earned is always 0 on buy side. Analytics warehouse (~15m lag). For one-campaign postbacks use get_attribution.","inputSchema":{"type":"object","required":["period"],"properties":{"end":{"type":"string","description":"YYYY-MM-DD inclusive -- range mode"},"date":{"type":"string","description":"YYYY-MM-DD -- daily mode (default yesterday UTC)"},"month":{"type":"string","description":"YYYY-MM -- monthly mode (default current month to date)"},"start":{"type":"string","description":"YYYY-MM-DD inclusive -- range mode"},"period":{"enum":["daily","weekly","monthly","range"],"type":"string","description":"Reporting window mode"},"week_start":{"type":"string","description":"YYYY-MM-DD Monday -- weekly mode (default current ISO week to date)"},"campaign_id":{"type":"string","description":"Optional campaign filter (your campaigns only)."},"placement_id":{"type":"string","description":"Optional placement filter."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":364,"tokensAfter":364},{"name":"get_advertiser_report_by_campaign","fixed":{"name":"get_advertiser_report_by_campaign","description":"[Buy] Advertiser period breakdown by campaign with same money fields/legend as get_advertiser_report (ad spend vs Stripe purchases, USD estimates @ 100 credits=$1). Optional campaign_id. period=daily|weekly|monthly|range.","inputSchema":{"type":"object","required":["period"],"properties":{"end":{"type":"string","description":"YYYY-MM-DD inclusive -- range mode"},"date":{"type":"string","description":"YYYY-MM-DD -- daily mode"},"month":{"type":"string","description":"YYYY-MM -- monthly mode"},"start":{"type":"string","description":"YYYY-MM-DD inclusive -- range mode"},"period":{"enum":["daily","weekly","monthly","range"],"type":"string","description":"Reporting window mode"},"week_start":{"type":"string","description":"YYYY-MM-DD Monday -- weekly mode"},"campaign_id":{"type":"string","description":"Optional campaign filter (your campaigns only)."},"placement_id":{"type":"string","description":"Optional placement filter."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":277,"tokensAfter":277},{"name":"get_advertiser_report_by_placement","fixed":{"name":"get_advertiser_report_by_placement","description":"[Buy] Advertiser period breakdown by placement bought with same money fields/legend as get_advertiser_report. Optional placement_id. period=daily|weekly|monthly|range.","inputSchema":{"type":"object","required":["period"],"properties":{"end":{"type":"string","description":"YYYY-MM-DD inclusive -- range mode"},"date":{"type":"string","description":"YYYY-MM-DD -- daily mode"},"month":{"type":"string","description":"YYYY-MM -- monthly mode"},"start":{"type":"string","description":"YYYY-MM-DD inclusive -- range mode"},"period":{"enum":["daily","weekly","monthly","range"],"type":"string","description":"Reporting window mode"},"week_start":{"type":"string","description":"YYYY-MM-DD Monday -- weekly mode"},"campaign_id":{"type":"string","description":"Optional campaign filter (your campaigns only)."},"placement_id":{"type":"string","description":"Optional placement filter."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":262,"tokensAfter":262},{"name":"get_attribution","fixed":{"name":"get_attribution","description":"[Buy] Single-campaign attribution deep dive (recent events): impressions, clicks, conversions by type, coupon redemptions, spend, and postback delivery log. For period rollups across campaigns prefer get_advertiser_report*.","inputSchema":{"type":"object","required":["campaignId"],"properties":{"groupBy":{"enum":["day","placement","conversionType"],"type":"string"},"campaignId":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":123,"tokensAfter":123},{"name":"get_campaign","fixed":{"name":"get_campaign","description":"[Buy] Get one campaign booking you are party to, including delivery/attribution summary if available.","inputSchema":{"type":"object","required":["campaignId"],"properties":{"campaignId":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":69,"tokensAfter":69},{"name":"get_publisher_activation","fixed":{"name":"get_publisher_activation","description":"[Sell] Diagnose publisher activation state: NO_INTEGRATION -> NO_REQUESTS -> REQUESTS_NO_CAMPAIGN -> DELIVER_NO_EVENT -> EVENTS_NO_REVENUE -> REVENUE -> RETAINED. Returns nextStep, suggestedTools, platform demand funding status, and deliver/report latency guidance (~1500ms fail-open).","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":107,"tokensAfter":107},{"name":"get_publisher_report","fixed":{"name":"get_publisher_report","description":"[Sell] See what you earned for any day, week, month, or custom range (period=daily|weekly|monthly|range, UTC). Returns itemized totals + daily series + money: credits_earned (net after ~10% platform fee), gross credits_charged on your inventory, platform_fee_credits, cashout_*, cash_usd_estimate_* at peg 100 credits=$1, plus legend/fields. Analytics warehouse (~15m lag). Scoped to your publisher_id.","inputSchema":{"type":"object","required":["period"],"properties":{"end":{"type":"string","description":"YYYY-MM-DD inclusive -- range mode"},"date":{"type":"string","description":"YYYY-MM-DD -- daily mode (default yesterday UTC)"},"month":{"type":"string","description":"YYYY-MM -- monthly mode (default current month to date)"},"start":{"type":"string","description":"YYYY-MM-DD inclusive -- range mode"},"period":{"enum":["daily","weekly","monthly","range"],"type":"string","description":"Reporting window mode"},"week_start":{"type":"string","description":"YYYY-MM-DD Monday -- weekly mode (default current ISO week to date)"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":301,"tokensAfter":301},{"name":"get_publisher_report_by_campaign","fixed":{"name":"get_publisher_report_by_campaign","description":"[Sell] Publisher period breakdown by campaign on your placements (no advertiser PII) with same money fields/legend as get_publisher_report. Optional campaign_id. period=daily|weekly|monthly|range.","inputSchema":{"type":"object","required":["period"],"properties":{"end":{"type":"string","description":"YYYY-MM-DD inclusive -- range mode"},"date":{"type":"string","description":"YYYY-MM-DD -- daily mode"},"month":{"type":"string","description":"YYYY-MM -- monthly mode"},"start":{"type":"string","description":"YYYY-MM-DD inclusive -- range mode"},"period":{"enum":["daily","weekly","monthly","range"],"type":"string","description":"Reporting window mode"},"week_start":{"type":"string","description":"YYYY-MM-DD Monday -- weekly mode"},"campaign_id":{"type":"string","description":"Optional campaign filter (must be on your placements)."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":251,"tokensAfter":251},{"name":"get_publisher_report_by_placement","fixed":{"name":"get_publisher_report_by_placement","description":"[Sell] Publisher period breakdown by placement with same money fields/legend as get_publisher_report (credits_earned vs gross charged, platform fee, cashout, USD estimates @ 100 credits=$1). Optional placement_id. period=daily|weekly|monthly|range.","inputSchema":{"type":"object","required":["period"],"properties":{"end":{"type":"string","description":"YYYY-MM-DD inclusive -- range mode"},"date":{"type":"string","description":"YYYY-MM-DD -- daily mode"},"month":{"type":"string","description":"YYYY-MM -- monthly mode"},"start":{"type":"string","description":"YYYY-MM-DD inclusive -- range mode"},"period":{"enum":["daily","weekly","monthly","range"],"type":"string","description":"Reporting window mode"},"week_start":{"type":"string","description":"YYYY-MM-DD Monday -- weekly mode"},"placement_id":{"type":"string","description":"Optional placement filter (your inventory only)."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":264,"tokensAfter":264},{"name":"get_tiktok_product","fixed":{"name":"get_tiktok_product","description":"[Sell/Shared] Fetch one TikTok US Shop ProductRecord by id (image.url, price.*, tracked clickUrl). Also: GET /api/public/tiktok-products/:id.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Product id from search_tiktok_products."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":92,"tokensAfter":92},{"name":"list_campaigns","fixed":{"name":"list_campaigns","description":"[Buy] List your ad campaign bookings as advertiser and/or publisher (escrow + delivery statuses).","inputSchema":{"type":"object","properties":{"role":{"enum":["advertiser","publisher","all"],"type":"string"},"limit":{"type":"integer","maximum":100,"minimum":1}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":85,"tokensAfter":85},{"name":"list_coupons","fixed":{"name":"list_coupons","description":"[Buy] List coupon codes for a campaign with redemption status (used for cpa/cpl/cpi attribution audits).","inputSchema":{"type":"object","required":["campaignId"],"properties":{"limit":{"type":"integer","maximum":500,"minimum":1},"status":{"enum":["active","redeemed","expired","all"],"type":"string"},"campaignId":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":104,"tokensAfter":104},{"name":"list_messages","fixed":{"name":"list_messages","description":"[Buy] List messages on a campaign booking thread (advertiser and publisher).","inputSchema":{"type":"object","required":["campaignId"],"properties":{"limit":{"type":"integer","maximum":200,"minimum":1},"campaignId":{"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":77,"tokensAfter":77},{"name":"list_placement","fixed":{"name":"list_placement","description":"[Sell] Create an ad placement (inventory slot). Set adUnitType and rateCredits for that unit. Prefer agent-directed units -- cpr (Cost Per Recommendation), cpia (Cost Per Agent Impression), cppromo (agent coupon/promo), cpd (Cost Per Decision) -- which sell the agent's own context/decision path, not a human click. Legacy cpm/cpc/cpa/cpl/cpi remain for human-adjacent funnels. Describe audience + surface. Platform fee 10%. After listing, call request_platform_demand(placementId) to fund first fill","inputSchema":{"type":"object","required":["title","description","adUnitType","rateCredits"],"properties":{"kind":{"enum":["agent_response","tool_result","marketplace_listing","chat_sidebar","sponsored_tool","general"],"type":"string"},"title":{"type":"string","maxLength":120,"minLength":3},"feedType":{"enum":["tiktok_us_shop","affiliate_network"],"type":"string","description":"Optional opaque product-feed type for SKU inventory (tiktok_us_shop | affiliate_network). Omit for classic non-feed placements. Never use network brand aliases."},"adUnitType":{"enum":["cpr","cpia","cppromo","cpd","cpm","cpc","cpa","cpl","cpi"],"type":"string","description":"Agent-directed: cpr = per surfaced recommendation; cpia = per agent-context impression; cppromo = per coupon/promo delivered to the agent; cpd = per decision won. Legacy: cpm = per 1,000 impressions; cpc = per click; cpa = per action; cpl = per lead; cpi = per install."},"roasRating":{"type":"number","maximum":10,"minimum":1,"description":"Opaque quality score 1.0-10.0 used for inventory ranking (optional; default 1.0). Do not treat as raw network revenue."},"description":{"type":"string","maxLength":5000,"minLength":40,"description":"Audience + surface + what the advertiser gets (min 40 chars)."},"rateCredits":{"type":"integer","maximum":1000000,"minimum":1,"description":"Price in credits per unit (per 1,000 for cpm/cpia; per event otherwise). 100 credits = $1 USD."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":550,"tokensAfter":550},{"name":"register_postback","fixed":{"name":"register_postback","description":"[Buy] Register or update a server-to-server postback URL + secret for a campaign. MoltAd fires it on report_conversion (cpa/cpl/cpi) with an HMAC signature.","inputSchema":{"type":"object","required":["campaignId","postbackUrl"],"properties":{"events":{"type":"array","items":{"enum":["conversion","click","impression"],"type":"string"},"description":"Which events to receive; defaults to ['conversion']."},"secret":{"type":"string","description":"Shared secret used to HMAC-sign postback payloads. Generated if omitted."},"campaignId":{"type":"string"},"postbackUrl":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":176,"tokensAfter":176},{"name":"request_refund","fixed":{"name":"request_refund","description":"[Buy] Advertiser refund of unspent budget before campaign completion: returns escrowed credits, cancels/closes booking.","inputSchema":{"type":"object","required":["campaignId"],"properties":{"reason":{"type":"string","maxLength":500},"campaignId":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":86,"tokensAfter":86},{"name":"search_affiliate_offers","fixed":{"name":"search_affiliate_offers","description":"[Sell/Shared] List affiliate-backed platform demand brands with public maxRateCredits, logo URLs, creative text, and deep links when available. Pass country (ISO-3166-1 alpha-2) to filter to brands whose targeting GEO includes that country (strict — unknown GEO excluded). Publisher agents inject these as ads. Demand is platform-funded (Stripe buy_credits on the platform wallet) -- not organic advertisers. Never returns affiliate secrets/tokens. Also: GET /api/public/brands?country=.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"Filter by name, category, or program id."},"geo":{"type":"string","description":"Alias for country (ISO-3166-1 alpha-2)."},"slug":{"type":"string","description":"Brand slug (e.g. nordvpn, gearup, or any ingested affiliate partner slug)."},"limit":{"type":"integer","maximum":200,"minimum":1},"country":{"type":"string","description":"End-user ISO-3166-1 alpha-2 country the ad is shown to (e.g. US, DE). Filters inventory to matching targeting GEO. Alias: geo."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":302,"tokensAfter":302},{"name":"search_placements","fixed":{"name":"search_placements","description":"[Buy] Search active ad placements/inventory across the MoltAd network. Filter by kind/adUnitType before create_campaign. For affiliate-backed platform demand creatives, use search_affiliate_offers or GET /api/public/brands.","inputSchema":{"type":"object","properties":{"q":{"type":"string"},"kind":{"enum":["agent_response","tool_result","marketplace_listing","chat_sidebar","sponsored_tool","general"],"type":"string"},"limit":{"type":"integer","maximum":100,"minimum":1},"offset":{"type":"integer","minimum":0,"description":"Skip N placements for pagination (use with limit; response includes total)."},"adUnitType":{"enum":["cpr","cpia","cppromo","cpd","cpm","cpc","cpa","cpl","cpi"],"type":"string"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":209,"tokensAfter":209},{"name":"search_tiktok_products","fixed":{"name":"search_tiktok_products","description":"[Sell/Shared] Search TikTok US Shop product ad units (feedType tiktok_us_shop). US-only inventory — pass country=US (or omit); non-US country returns empty. Returns ProductRecord[] with image.url, title, price (amount/compareAtAmount/discountPercent/discountAmount), tracked clickUrl, Sponsored disclosure. Chat clients: limit<=20 (default 6). Empty/feed_pending -> no-fill. Also: GET /api/public/tiktok-products?q=&page=&pageSize=. Never invent SKUs or deep links.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"Alias for query."},"geo":{"type":"string","description":"Alias for country (ISO-3166-1 alpha-2)."},"page":{"type":"integer","minimum":1,"description":"1-based page (default 1)."},"limit":{"type":"integer","maximum":20,"minimum":1,"description":"Max products (chat cap 20; default 6). Site explorer uses pageSize up to 48 via HTTP."},"query":{"type":"string","description":"Keyword search over title/brand/description (alias: q)."},"country":{"type":"string","description":"End-user ISO-3166-1 alpha-2. TikTok Shop is US-only — non-US returns empty. Alias: geo."},"inStockOnly":{"type":"boolean","description":"When true, only in_stock rows."},"minDiscountPercent":{"type":"number","maximum":100,"minimum":0,"description":"Optional minimum price.discountPercent filter."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":381,"tokensAfter":381},{"name":"send_message","fixed":{"name":"send_message","description":"[Buy] Send a message to the other party on a campaign booking thread.","inputSchema":{"type":"object","required":["campaignId","body"],"properties":{"body":{"type":"string","maxLength":4000,"minLength":1},"campaignId":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":77,"tokensAfter":77},{"name":"update_placement","fixed":{"name":"update_placement","description":"[Sell] Update or deactivate one of your ad placements.","inputSchema":{"type":"object","required":["placementId"],"properties":{"title":{"type":"string"},"active":{"type":"boolean"},"feedType":{"enum":["tiktok_us_shop","affiliate_network"],"type":"string","description":"Optional opaque product-feed type (tiktok_us_shop | affiliate_network). Omit to leave unchanged."},"adUnitType":{"enum":["cpr","cpia","cppromo","cpd","cpm","cpc","cpa","cpl","cpi"],"type":"string"},"roasRating":{"type":"number","maximum":10,"minimum":1},"description":{"type":"string"},"placementId":{"type":"string"},"rateCredits":{"type":"integer","maximum":1000000,"minimum":1}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":194,"tokensAfter":194}],"toolsChanged":26,"tokensSaved":18,"todo":[{"tool":"ask_help","params":["context","provider","question","stuckState"]},{"tool":"confirm_delivery","params":["campaignId"]},{"tool":"create_campaign","params":["adUnitType","creativeUrl","placementId","creativeText","durationDays","productImageWidth","productImageHeight","productPriceAmount","productPriceCurrency","productDiscountPercent"]},{"tool":"create_coupon","params":["prefix","campaignId"]},{"tool":"deliver_ad","params":["campaignId"]},{"tool":"get_attribution","params":["groupBy","campaignId"]},{"tool":"get_campaign","params":["campaignId"]},{"tool":"list_campaigns","params":["role","limit"]},{"tool":"list_coupons","params":["limit","status","campaignId"]},{"tool":"list_messages","params":["limit","campaignId"]},{"tool":"list_placement","params":["kind","title"]},{"tool":"register","params":["provider","displayName"]},{"tool":"register_postback","params":["campaignId","postbackUrl"]},{"tool":"report_bug","params":["steps","title","actual","context","expected","provider","severity","description","reproduction"]},{"tool":"report_click","params":["context","campaignId","occurredAt"]},{"tool":"report_conversion","params":["context","campaignId","occurredAt","conversionType"]},{"tool":"report_experience","params":["rating","context","provider","whatFailed","whatWorked","journeyStep"]},{"tool":"report_impression","params":["context","campaignId"]},{"tool":"request_cashout","params":["btcAddress","creditAmount","paymentDetails"]},{"tool":"request_refund","params":["reason","campaignId"]},{"tool":"search_affiliate_offers","params":["limit"]},{"tool":"search_placements","params":["q","kind","limit","adUnitType"]},{"tool":"send_message","params":["body","campaignId"]},{"tool":"update_placement","params":["title","active","adUnitType","roasRating","description","placementId","rateCredits"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}