Execute AdCP Creative Protocol operations with creative agents - build creatives from briefs or existing assets, preview renderings, and discover format specifications. Use when users want to generate or transform ad creatives, preview how ads will look, or understand creative format requirements.
This skill enables you to execute the AdCP Creative Protocol with creative agents. Use get_adcp_capabilities, list_transformers, build_creative, and preview_creative exposed by the connected agent. In AdCP 3.2, list_creative_formats is deprecated and must not drive a new workflow.
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.
The Creative Protocol provides standardized discovery, build, and preview tasks:
| Task | Purpose | Response Time |
|------|---------|---------------|
| get_adcp_capabilities | Discover canonical creative capabilities | ~1s |
| list_transformers | Discover selectable production services | ~1s |
| build_creative | Generate or transform creatives | ~30s-5m |
| preview_creative | Get visual previews | ~5s |
| get_creative_delivery | Variant-level delivery data | ~5-30s |
get_adcp_capabilities.creative.supported_formats[]build_creative to generate or transform a manifestpreview_creative to see how it renderssync_creatives (media-buy task) to traffic the creativeProducts and manifests use 15 canonical format_kind values: 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, and coordinated_placements. Use custom only for a shape outside those canonicals, with required format_shape and format_schema.
A ProductFormatDeclaration carries:
format_kind: the canonical (discriminator)params: per-canonical parameters narrowing the format (dimensions, durations, codecs, char limits, CTA enums, sizes[], etc.)format_option_id: stable product/publisher option identifier when declarations need routingv1_format_ref: [{agent_url, id}]: always an array — links this v2 declaration to one or more v1 named formats. Multi-size declarations should carry one ref per size in sizes[].seller_preference: "preferred" | "accepted" | "discouraged": soft routing hint when a product carries multiple format_optionsWhere to declare a format:
| Where | When to use |
|---|---|
| adagents.json top-level formats[] (publisher catalog) | Format shared across many sellers of the same publisher inventory; declares the publisher-authoritative shape once |
| Product.format_options[] (inline on a product) | Seller-specific accepted set. Reference a publisher declaration with {publisher_domain, format_option_id} when applicable |
| Placement.format_options[] (format_option_id reference or inline) | Tying a publisher placement to accepted publisher formats |
| get_adcp_capabilities.creative.supported_formats[] | What a creative agent can build, validate, or preview; every entry has an agent-local capability_id |
Size flexibility (image / html5 / display_tag): exactly one of three modes — width+height (fixed), sizes: [{w,h}] (multi-size, mirrors OpenRTB banner.format[]), or min_width/max_width/min_height/max_height (responsive).
Publisher catalog resolution: call GET https://agenticadvertising.org/api/registry/publisher?domain=<publisher_domain> for the complete publisher-origin → AgenticAdvertising.org community-catalog → fail-closed resolution order and provenance. Add &include=placements for provenance-labeled placement summaries with resolved canonical format options. The top-level formats[] remains a lossy display summary; fetch the raw URL returned in files.adagents_json.registry_url or hosting.resolved_url / hosting.expected_url for custom-format validation and omitted declaration fields. Do not synthesize publisher authority from a sales or creative agent.
Conversion tracking is NOT a creative-format concern. Pixel-firing, conversion events, and attribution belong on sync_event_sources / event_log (campaign-scoped). Don't stuff pixel_id into platform_extensions on a format declaration.
See docs/creative/canonical-formats.mdx for the full vocabulary, narrowing rules, error-code surface, and worked examples (Meta Reels, IAB display, host-read podcast, generative DSP).
Discover this creative agent's canonical operations.
Request:
{ "protocols": ["creative"] }
Response contains:
creative.supported_formats[]: entries with stable, catalog-unique capability_id, canonical format, and operations; preview support is declared by operations containing previewsupports_generation and supports_transformersGenerate a creative from scratch or transform an existing creative to a different format.
Pure Generation (from brief):
{
"message": "Create a banner promoting our winter sale with a warm, inviting feel",
"target_capability_id": "winter_banner_300x250",
"idempotency_key": "1db179c8-09c8-4eb3-9b96-ae741acdaf1f",
"brand": {
"domain": "mybrand.com"
}
}
Transformation (resize/reformat):
{
"message": "Adapt this leaderboard to a 300x250 banner",
"creative_manifest": {
"format_kind": "image",
"assets": {
"image_main": {
"asset_type": "image",
"url": "https://cdn.mybrand.com/leaderboard.png",
"width": 728,
"height": 90
},
"landing_page_url": {
"asset_type": "url",
"url": "https://mybrand.com/spring-sale"
}
}
},
"target_capability_id": "banner_resize_300x250",
"idempotency_key": "4c052b08-2e5f-4a66-b0c0-57c199302411"
}
Key fields:
message (string, optional): Natural language instructions for generation/transformationcreative_manifest (object, optional): Source manifest - minimal for generation, complete for transformationtarget_capability_id (string): One output advertised by this agent; use target_capability_ids[] for multiple outputsResponse contains:
creative_manifest: Complete manifest ready for preview_creative or sync_creativesGenerate visual previews of creative manifests.
Single preview:
{
"request_type": "single",
"creative_manifest": {
"format_kind": "image",
"assets": {
"image_main": {
"asset_type": "image",
"url": "https://cdn.example.com/banner.png",
"width": 300,
"height": 250
}
}
}
}
With device variants:
{
"request_type": "single",
"creative_manifest": { /* includes format_kind, assets */ },
"inputs": [
{ "name": "Desktop", "macros": { "DEVICE_TYPE": "desktop" } },
{ "name": "Mobile", "macros": { "DEVICE_TYPE": "mobile" } }
]
}
Batch preview (5-10x faster):
{
"request_type": "batch",
"requests": [
{ "creative_manifest": { /* creative 1 */ } },
{ "creative_manifest": { /* creative 2 */ } }
]
}
Key fields:
request_type (string, required): "single" or "batch"creative_manifest (object, required): Complete creative manifestinputs (array, optional): Generate variants with different macros/contextsoutput_format (string, optional): "url" (default) or "html"Response contains:
previews: Array of preview objects with preview_url or preview_htmlexpires_at: When preview URLs expireRetrieve variant-level creative delivery data from a creative agent. Returns what was generated, served, and how each variant performed.
Request:
{
"media_buy_ids": ["mb_abc123"],
"start_date": "2025-01-01",
"end_date": "2025-01-31",
"max_variants": 10
}
Key fields:
media_buy_ids (array, optional): Filter to specific media buyscreative_ids (array, optional): Filter to specific creativesstart_date, end_date (string, optional): Delivery period (YYYY-MM-DD)max_variants (integer, optional): Max variants per creative (useful for generative creatives)account (object, optional): Account for routing and scopingAt least one scoping filter (media_buy_ids or creative_ids) is required.
Response contains:
creatives: Array with variant-level delivery data
variant_id: Unique variant identifier (use in preview_creative with request_type: "variant")generation_context: What triggered this variant (page topic, device, etc.)delivery_metrics: Impressions, clicks, completionsext: Platform engagement metrics (likes, shares, comments)A creative agent's capability_id is a local operation selector:
{
"target_capability_id": "winter_banner_300x250"
}
It is never copied into a product or manifest. The resulting manifest is portable and carries the canonical format contract:
Manifests pair format specifications with actual assets:
{
"format_kind": "image",
"assets": {
"banner_image": {
"asset_type": "image",
"url": "https://cdn.example.com/banner.png",
"width": 300,
"height": 250
},
"headline": {
"asset_type": "text",
"content": "Shop Now"
},
"clickthrough_url": {
"asset_type": "url",
"url": "https://brand.com/sale"
}
}
}
Common asset types:
image: Static images (JPEG, PNG, WebP)video: Video files (MP4, WebM) or VAST tagsaudio: Audio files (MP3, M4A) or DAAST tagstext: Headlines, descriptions, CTAshtml: HTML5 creatives or third-party tagsjavascript: JavaScript tagsurl: Tracking pixels, clickthrough URLsFor generative creatives, provide brand context by domain:
{
"brand": {
"domain": "acmecorp.com"
}
}
The agent resolves the domain to retrieve the brand's identity (name, colors, guidelines, etc.) from its brand.json file.
target_capability_id, brand, and a natural language message. The creative agent generates all output assets from scratch.message guidance.Common error patterns:
Error responses include:
{
"error": {
"code": "FORMAT_NOT_SUPPORTED",
"message": "target_capability_id is not advertised by this creative agent"
}
}
npx skills add adcontextprotocol/adcp-creative下载完整 Skill 目录,包含 SKILL.md 及所有相关文件
Generate or edit images via Gemini 3 Pro Image (Nano Banana Pro).
Batch-generate images via OpenAI Images API. Random prompt sampler + `index.html` gallery.
Generate spectrograms and feature-panel visualizations from audio with the songsee CLI.
Extract frames or short clips from videos using ffmpeg.
Search GIF providers with CLI/TUI, download results, and extract stills/sheets.
Category:media-generate