adcontextprotocol/adcp/adcp-media-buy
Claude Code and agent skill by adcontextprotocol/adcp
- community
Checking that the SKILL.md file is still in the repository.
Execute AdCP Media Buy Protocol operations with sales agents - discover advertising products, create and manage campaigns, sync creatives, and track delivery. Use when users want to buy advertising, create media buys, interact with ad sales agents, or test advertising APIs.
Install
npx vskill@latest install adcontextprotocol/adcp/adcp-media-buySKILL.md
AdCP Media Buy Protocol
This skill enables you to execute the AdCP Media Buy Protocol with sales agents. Use the standard MCP tools (get_products, create_media_buy, sync_creatives, etc.) exposed by the connected agent.
Buyer-side basics — idempotency replay,oneOfvariants, asyncstatus:'submitted'polling, error recovery fromadcp_error.issues[]— live inskills/call-adcp-agent/SKILL.md. This skill covers per-task semantics only.
Overview
3.2 targeting-aware discovery: These fields are available only when theseller serves AdCP 3.2+ and the installed SDK exposes the 3.2 schema. Checkget_adcp_capabilities.adcp.supported_versions, pin the selected release inadcp_version, and validate the echoed served release before sending them.A missing release-precision declaration, a 3.1-or-earlier result, or amajor-only declaration is not evidence of support: omit the 3.2 fields and uselegacy targeting filters or explicit brief prose. Do not probe by sendingunknown fields because a legacy open schema may accept and ignore them. The publictraining agent serves this flow atadcp_version: "3.2".
The Media Buy Protocol provides these common standardized tasks:
| Task | Purpose | Response Time | |
|---|---|---|---|
list_products | Read matching offers without seller curation | ~1-5s | |
request_proposals | Request seller-authored draft plans | ~60s or async | |
refine_proposals | Revise drafts or finalize unchanged terms into inventory holds | ~60s or async | |
decline_proposals | Record terminal buyer disposition | ~1-5s | |
accept_proposal | Accept a finalized proposal into a MediaBuy | Minutes-Days | |
get_products | Use the 3.x compatibility facade for discovery and proposals | ~60s | |
get_adcp_capabilities | See agent capabilities, supported protocols, and publisher properties | ~1s | |
create_media_buy | Create direct buys or use the 3.x proposal adapter | Minutes-Days | |
update_media_buy | Modify campaigns | Minutes-Days | |
get_media_buys | Retrieve campaign state and status | ~1-5s | |
sync_creatives | Upload creative assets | Minutes-Days | |
sync_catalogs | Sync product feeds and catalogs | Minutes-Days | |
list_creatives | Query creative library | ~1s | |
get_media_buy_delivery | Get performance data | ~60s | |
provide_performance_feedback | Share outcomes with publishers | ~1-5s |
Typical Workflow
- Discover products: use
list_products, orrequest_proposalswith a brief - Verify the offer: inspect formats, pricing, forecast,
overlay_support, and anytargeting_resolution - Negotiate and hold: revise a draft as needed, then finalize it without changing terms
- Accept or decline: call
accept_proposalfor the held snapshot ordecline_proposalswhen the buyer stops pursuing it - Upload creatives: use
sync_creativesto add creative assets - Monitor delivery: use
get_media_buy_deliveryto track performance
Canonical formats (AdCP 3.2)
Products carry format_options[]: a list of ProductFormatDeclaration entries describing the creative shapes the product accepts. Each declaration carries:
format_kind— one of the 15 canonicals:image,html5,display_tag,image_carousel,video_hosted,video_vast,audio_hosted,audio_vast,audio_daast,sponsored_placement,native_in_feed,responsive_creative,agent_placement,seller_rendered_stateful_display, orcoordinated_placements; usecustomonly withformat_shapeandformat_schemaparams— per-canonical parameters narrowing the format (dimensions, durations, codecs, char limits, CTA enums)- Optional
format_option_id— disambiguates product options and identifies publisher-catalog declarations when paired withpublisher_domain - Optional
v1_format_ref: [{agent_url, id}]— array linking this v2 declaration to one or more v1 named formats (for dual emission during the v1↔v2 migration). Multi-size declarations should carry one ref per size - Optional
seller_preference: "preferred" | "accepted" | "discouraged"— soft routing hint when a multi-format product has several options at the same price
Multi-format products. A flexible publisher slot is one product with N format_options entries — e.g., Pinnacle Media's homepage accepts image OR html5 OR display_tag at multiple sizes via three format_options, one per type. Buyer picks the creative type they ship.
Size flexibility. Display canonicals (image / html5 / display_tag) declare size in one of three modes: fixed (width+height), multi-size (sizes: [{w,h}] — mirrors OpenRTB banner.format[]), or responsive (min_width/max_width/min_height/max_height). Modes are mutually exclusive.
Discovering publisher catalogs. Call GET https://agenticadvertising.org/api/registry/publisher?domain=<publisher_domain> for publisher-origin → AgenticAdvertising.org community-catalog → fail-closed resolution and provenance. Add &include=placements for provenance-labeled placement summaries with resolved canonical format options. The lookup's top-level formats[] remains a lossy display summary; fetch the returned raw registry or hosting URL when you need custom schema fields or other omitted declaration fields. Do not infer publisher authority from a seller's product catalog. Seller-specific deliverability comes from that seller's Product.format_options[].
Conversion tracking lives elsewhere. Pixel-firing, conversion events, and attribution belong on sync_event_sources / event_log (campaign-scoped), NOT on creative format declarations. Sending pixel_id in platform_extensions on a format is a category error.
Error codes specific to canonical formats. FORMAT_PROJECTION_FAILED, FORMAT_DECLARATION_DIVERGENT, FORMAT_DECLARATION_V1_AMBIGUOUS, FORMAT_CAPABILITY_UNRESOLVED, FORMAT_DECLARATION_V1_LOSSY_MULTI_SIZE — all non-fatal advisories surfaced via the response errors[] array. See static/schemas/source/enums/error-code.json for full recovery semantics.
See docs/creative/canonical-formats.mdx for the full vocabulary, narrowing rules, and worked examples.
Task Reference
get_products
Discover buyable product configurations. Choose each request surface by what it means:
brief: goals, context, semantic audience intent, preferences, and
requirements without a structured representation.
filters: hard offer filters such as metadata, dates, budget, availability,
commercial fit, and reporting support. They decide which products may be returned and apply in brief, wholesale, and refine.
targeting_overlay: exact delivery constraints known now. Use this for
countries, ages, placements, properties, collections, and other typed targeting so availability, price, and forecast already reflect them.
required_overlay_support: targeting dimensions whose values will be chosen
independently on packages later. This requests capability, not one product per value.
Prefer a structured field whenever one exists. It uses fewer tokens, is applied by code, and avoids lossy inference. Explicit hard targeting written only in a brief is still binding; when a seller extracts a structured predicate from prose that materially affects eligibility, pricing, or forecasting, require one response-level confirmation in GetProductsResponse.targeting_resolution.brief_targeting.
Request:
Key fields:
buying_mode(string):"brief","wholesale", or"refine"brief(string): Natural-language curation input; hard statements remain requirementsbrand(object): Brand identity -{ "domain": "acmecorp.com" }filters(object, optional): Hard offer filters that decide which products may be returnedtargeting_overlay(object, optional): Concrete targeting applied during discovery and carried into purchaserequired_overlay_support(object, optional): Dimensions the product must allow packages to select later
Response contains:
products: Array of matching products withproduct_id,name,description,pricing_options- Each product includes canonical
format_options[]and targeting capabilities overlay_support: binding product-scoped dimensions selectable latertargeting_resolution.modifications: sparse differences from the requested structured overlay; selecting the product accepts them- Response
targeting_resolution.brief_targeting: the seller's single structured interpretation of hard targeting inferred from prose - No
targeting_resolutionmeans exact acceptance of the structured overlay only; it does not prove how prose was interpreted
Treat product_id as the opaque identity of this configured offer. Keep it within the same discovery/refinement context and purchase it before expires_at; do not assume it is a permanent cross-session ID.
create_media_buy
Create an advertising campaign from selected products.
Request:
Key fields:
brand(object, required): Brand identity -{ "domain": "acmecorp.com" }packages(array, required): Products to purchase, each with:product_id: Fromget_productsresponsepricing_option_id: From product'spricing_optionsbudget: Amount in dollarsbid_price: Required for auction pricingtargeting_overlay: Package targeting permitted by the selected product'soverlay_support; it composes with targeting already bound during discovery and must not silently broaden itcreative_idsorcreatives: Creative assignmentsstart_time(string, required):"asap"or an ISO 8601 datetime (e.g.,"2024-06-01T00:00:00Z")end_time(string, required): ISO 8601 datetime
Response contains:
media_buy_id: The created campaign identifierstatus: Current lifecycle state —pending_creatives(no creatives assigned yet),pending_start(creatives in place, not yet serving: waiting for the flight date, or for seller confirmation whenconfirmed_atis null), oractive(serving immediately)packages: Created packages with their IDs
update_media_buy
Modify an existing campaign.
Request:
Key fields:
media_buy_id(string, required): The campaign to updateupdates(object): Changes to apply - budget_change, end_time, status, targeting, etc.
sync_catalogs
Sync product catalogs, store locations, job postings, and other structured feeds to a seller account. Supports inline items or external feed URLs. When called without catalogs, returns existing catalogs (discovery mode).
Request:
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/adcp-media-buy/SKILL.md
Popularity
- Repository stars
- 196
- Repository forks
- 42
- 7-day trend score
- 26
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 21 Mar 2026, 7 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/adcontextprotocol/adcp/adcp-media-buy)