Skip to content

Commit de101b6

Browse files
bokelleyclaude
andauthored
feat: clarify format discovery workflow and tool relationship (#64)
Addresses confusion about the purpose of list_creative_formats and its relationship with get_products. Key changes: - Restructure Creative Lifecycle to lead with format discovery workflow - Add format_ids parameter to list_creative_formats for reverse workflow support - Document both inventory-first and creative-first discovery approaches - Move workflow discussion from tool docs to Creative Lifecycle page - Clarify synergistic relationship between get_products and list_creative_formats The Creative Lifecycle now properly explains the fundamental question: "How do I figure out what creative formats I need to create?" before diving into library management details. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-authored-by: Claude <[email protected]>
1 parent 26b7b5c commit de101b6

File tree

5 files changed

+173
-11
lines changed

5 files changed

+173
-11
lines changed

docs/media-buy/creative-formats.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ title: Creative Formats
66

77
All creative formats have a unique identifier and specify delivery methods. Formats can require either a single asset or multiple assets for rich media experiences.
88

9+
**For the complete workflow on format discovery, see the [Creative Lifecycle](./creative-lifecycle#phase-1-format-discovery) documentation.**
10+
911
## Standard vs Custom Formats
1012

1113
AdCP defines two categories of formats:

docs/media-buy/creative-lifecycle.md

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,74 @@ title: Creative Lifecycle
44

55
# Creative Lifecycle
66

7-
AdCP provides a comprehensive centralized creative library for managing the entire lifecycle of creative assets. This document explains the conceptual model and workflow for creative management using the centralized library approach.
7+
AdCP manages the complete creative lifecycle from initial format discovery through ongoing optimization. This document covers the three main phases: discovering requirements, producing assets, and managing the creative library.
8+
9+
## Phase 1: Format Discovery
10+
11+
Before creating any creative assets, you need to understand **what formats are required**. AdCP provides two complementary tools that work together:
12+
13+
### The Discovery Workflow
14+
15+
**`get_products`** finds advertising inventory that matches your campaign needs, while **`list_creative_formats`** provides the detailed creative specifications for the formats those products require.
16+
17+
#### Two Common Approaches:
18+
19+
**1. Inventory-First** - "What products match my campaign?"
20+
```javascript
21+
// Find products for your campaign
22+
const products = await get_products({
23+
brief: "Premium video inventory for sports fans",
24+
promoted_offering: "Nike Air Max 2024"
25+
});
26+
// Products return: formats: ["video_15s_hosted", "homepage_takeover_2024"]
27+
28+
// Get creative specs for those specific formats
29+
const formatSpecs = await list_creative_formats({
30+
format_ids: products.products.flatMap(p => p.formats)
31+
});
32+
// Now you know: video_15s_hosted needs MP4 H.264, 15s, 1920x1080
33+
// homepage_takeover_2024 needs hero image + logo + headline
34+
```
35+
36+
**2. Creative-First** - "What video formats does this publisher support?"
37+
```javascript
38+
// Browse available video formats
39+
const videoFormats = await list_creative_formats({
40+
type: "video",
41+
category: "standard"
42+
});
43+
// Returns: video_15s_hosted, video_30s_vast, video_vertical_15s, etc.
44+
45+
// Find products supporting your creative capabilities
46+
const products = await get_products({
47+
promoted_offering: "Nike Air Max 2024",
48+
filters: {
49+
format_ids: ["video_15s_hosted", "video_30s_vast"]
50+
}
51+
});
52+
// Returns only products that accept these specific formats
53+
```
54+
55+
### Why Both Tools Matter
56+
57+
- **Without `list_creative_formats`**: Format IDs from products are meaningless strings
58+
- **Without `get_products`**: You don't know which formats actually have available inventory
59+
- **Together**: You understand both what's available AND what's required
60+
61+
**Common discovery patterns:**
62+
- **Campaign planning**: Inventory-first approach to find the right audience, then build creative
63+
- **Production planning**: Creative-first approach to understand capabilities, then find compatible inventory
64+
- **Cross-publisher campaigns**: Use standard formats for maximum reach across multiple publishers
65+
66+
---
67+
68+
## Phase 2: Creative Production
69+
70+
Once you understand format requirements, create the actual creative assets according to the specifications discovered in Phase 1.
71+
72+
---
73+
74+
## Phase 3: Creative Library Management
875

976
## The Creative Library Model
1077

docs/media-buy/tasks/get_products.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Discover available advertising products based on campaign requirements, using na
77

88
**Response Time**: ~60 seconds (inference/RAG with back-end systems)
99

10-
**Format Discovery**: Products return format references (IDs only). Use [`list_creative_formats`](./list_creative_formats) to get full format specifications including requirements, file types, and dimensions.
10+
**Format Discovery**: Products return format references (IDs only). Use [`list_creative_formats`](./list_creative_formats) to get full format specifications. **See [Creative Lifecycle](../creative-lifecycle#phase-1-format-discovery) for the complete workflow.**
1111

1212
**Request Schema**: [`/schemas/v1/media-buy/get-products-request.json`](/schemas/v1/media-buy/get-products-request.json)
1313
**Response Schema**: [`/schemas/v1/media-buy/get-products-response.json`](/schemas/v1/media-buy/get-products-response.json)

docs/media-buy/tasks/list_creative_formats.md

Lines changed: 90 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ sidebar_position: 2
55

66
# list_creative_formats
77

8-
Discover all supported creative formats in the system.
8+
Discover all supported creative formats in the system.
9+
10+
**See [Creative Lifecycle](../creative-lifecycle#phase-1-format-discovery) for the complete workflow on how this tool works with `get_products` for format discovery.**
911

1012
**Response Time**: ~1 second (simple database lookup)
1113

@@ -19,6 +21,7 @@ Discover all supported creative formats in the system.
1921
| `type` | string | No | Filter by format type (e.g., `"audio"`, `"video"`, `"display"`) |
2022
| `category` | string | No | Filter by category (`"standard"` or `"custom"`) |
2123
| `standard_only` | boolean | No | Only return standard formats (deprecated, use `category: "standard"`) |
24+
| `format_ids` | string[] | No | Filter by specific format IDs (e.g., from `get_products` response) |
2225

2326
## Response (Message)
2427

@@ -60,6 +63,7 @@ The message is returned differently in each protocol:
6063
- **requirements**: Format-specific requirements (varies by format type)
6164
- **assets_required**: Array of required assets with `asset_role` identifiers
6265

66+
6367
## Protocol-Specific Examples
6468

6569
The AdCP payload is identical across protocols. Only the request/response wrapper differs.
@@ -138,6 +142,81 @@ The AdCP payload is identical across protocols. Only the request/response wrappe
138142
}
139143
```
140144

145+
### Example 3: Reverse Workflow (Product-First)
146+
147+
#### MCP Request - Get specs for specific format IDs
148+
```json
149+
{
150+
"tool": "list_creative_formats",
151+
"arguments": {
152+
"format_ids": ["video_15s_hosted", "video_30s_vast", "display_300x250"]
153+
}
154+
}
155+
```
156+
157+
#### MCP Response
158+
```json
159+
{
160+
"message": "Found 3 specific formats. These are the exact creative requirements for your available inventory.",
161+
"formats": [
162+
{
163+
"format_id": "video_15s_hosted",
164+
"name": "15-Second Hosted Video",
165+
"type": "video",
166+
"category": "standard",
167+
"duration": "15s",
168+
"accepts_3p_tags": false,
169+
"assets_required": [
170+
{
171+
"asset_id": "video_file",
172+
"asset_type": "video",
173+
"asset_role": "hero_video",
174+
"required": true,
175+
"requirements": {
176+
"duration": "15s",
177+
"format": "MP4 H.264",
178+
"resolution": ["1920x1080", "1280x720"],
179+
"max_file_size_mb": 30
180+
}
181+
}
182+
]
183+
},
184+
{
185+
"format_id": "video_30s_vast",
186+
"name": "30-Second VAST Video",
187+
"type": "video",
188+
"category": "standard",
189+
"duration": "30s",
190+
"accepts_3p_tags": true,
191+
"delivery": {
192+
"method": "VAST",
193+
"versions": ["3.0", "4.0", "4.1", "4.2"]
194+
}
195+
},
196+
{
197+
"format_id": "display_300x250",
198+
"name": "Medium Rectangle",
199+
"type": "display",
200+
"category": "standard",
201+
"dimensions": "300x250",
202+
"accepts_3p_tags": false,
203+
"assets_required": [
204+
{
205+
"asset_id": "banner_image",
206+
"asset_type": "image",
207+
"asset_role": "hero_image",
208+
"required": true,
209+
"width": 300,
210+
"height": 250,
211+
"acceptable_formats": ["jpg", "png", "gif"],
212+
"max_file_size_kb": 200
213+
}
214+
]
215+
}
216+
]
217+
}
218+
```
219+
141220
### MCP Response
142221

143222
**Message:**
@@ -368,14 +447,16 @@ I found 15 display formats including standard IAB sizes and innovative formats l
368447

369448
## Usage Notes
370449

371-
- Use this tool to understand what creative formats are supported before creating assets
372-
- Standard formats follow IAB specifications for maximum compatibility
373-
- Non-standard formats may offer enhanced features but have limited inventory
374-
- For composite formats (like carousels), check `assets_required` for all needed components
375-
- Requirements vary by format type:
376-
- Audio formats specify duration, file types, and bitrate
377-
- Video formats include resolution, aspect ratio, and codec requirements
378-
- Display formats define dimensions, file types, and size limits
450+
- **Primary use case**: Get creative specifications after `get_products` returns format IDs
451+
- **Format IDs are just strings** until you get their specifications from this tool
452+
- **Standard formats** follow IAB specifications and work across multiple publishers
453+
- **Custom formats** (like "homepage_takeover") are publisher-specific with unique requirements
454+
- **The `format_ids` parameter** is the most efficient way to get specs for specific formats returned by products
455+
- **Asset requirements vary by format type**:
456+
- Audio formats: duration, file types, bitrate specifications
457+
- Video formats: resolution, aspect ratio, codec, delivery method
458+
- Display formats: dimensions, file types, file size limits
459+
- Rich media formats: multiple assets with specific roles and requirements
379460

380461
## Implementation Guide
381462

static/schemas/v1/media-buy/list-creative-formats-request.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,18 @@
1919
"standard_only": {
2020
"type": "boolean",
2121
"description": "Only return IAB standard formats"
22+
},
23+
"category": {
24+
"type": "string",
25+
"description": "Filter by format category",
26+
"enum": ["standard", "custom"]
27+
},
28+
"format_ids": {
29+
"type": "array",
30+
"description": "Filter by specific format IDs (e.g., from get_products response)",
31+
"items": {
32+
"type": "string"
33+
}
2234
}
2335
},
2436
"additionalProperties": false

0 commit comments

Comments
 (0)