adcp-media-buy
npx skills add https://github.com/adcontextprotocol/adcp --skill adcp-media-buy
Agent 安装分布
Skill 文档
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.
Overview
The Media Buy Protocol provides 8 standardized tasks for managing advertising campaigns:
| Task | Purpose | Response Time |
|---|---|---|
get_products |
Discover inventory using natural language | ~60s |
list_authorized_properties |
See publisher properties | ~1s |
list_creative_formats |
View creative specifications | ~1s |
create_media_buy |
Create campaigns | Minutes-Days |
update_media_buy |
Modify campaigns | Minutes-Days |
sync_creatives |
Upload creative assets | Minutes-Days |
list_creatives |
Query creative library | ~1s |
get_media_buy_delivery |
Get performance data | ~60s |
Typical Workflow
- Discover products:
get_productswith a natural language brief - Review formats:
list_creative_formatsto understand creative requirements - Create campaign:
create_media_buywith selected products and budget - Upload creatives:
sync_creativesto add creative assets - Monitor delivery:
get_media_buy_deliveryto track performance
Task Reference
get_products
Discover advertising products using natural language briefs.
Request:
{
"brief": "Looking for premium video inventory for a tech brand targeting developers",
"brand_manifest": {
"url": "https://example.com"
},
"filters": {
"channels": ["video", "ctv"],
"budget_range": { "min": 5000, "max": 50000 }
}
}
Key fields:
brief(string): Natural language description of campaign requirementsbrand_manifest(object): Brand context – can be{ "url": "https://..." }or inline manifestfilters(object, optional): Filter by channels, budget, delivery_type, format_types
Response contains:
products: Array of matching products withproduct_id,name,description,pricing_options- Each product includes
format_ids(supported creative formats) andtargeting(available targeting)
list_authorized_properties
Get the list of publisher properties this agent can sell.
Request:
{}
No parameters required.
Response contains:
publisher_domains: Array of domain strings the agent is authorized to sell
list_creative_formats
View supported creative specifications.
Request:
{
"format_types": ["video", "display"]
}
Key fields:
format_types(array, optional): Filter to specific format categories
Response contains:
formats: Array of format specifications with dimensions, requirements, and asset schemas
create_media_buy
Create an advertising campaign from selected products.
Request:
{
"buyer_ref": "campaign-2024-q1-001",
"brand_manifest": {
"url": "https://acme.com",
"name": "Acme Corporation"
},
"packages": [
{
"buyer_ref": "pkg-video-001",
"product_id": "premium_video_30s",
"pricing_option_id": "cpm-standard",
"budget": 10000
}
],
"start_time": {
"type": "asap"
},
"end_time": "2024-03-31T23:59:59Z"
}
Key fields:
buyer_ref(string, required): Your unique identifier for this campaignbrand_manifest(object, required): Brand identity – URL or inline manifestpackages(array, required): Products to purchase, each with:buyer_ref: Your identifier for this packageproduct_id: Fromget_productsresponsepricing_option_id: From product’spricing_optionsbudget: Amount in dollarsbid_price: Required for auction pricingtargeting_overlay: Additional targeting constraintscreative_idsorcreatives: Creative assignments
start_time(object, required):{ "type": "asap" }or{ "type": "scheduled", "datetime": "..." }end_time(string, required): ISO 8601 datetime
Response contains:
media_buy_id: The created campaign identifierstatus: Current state (oftenpendingfor async approval)packages: Created packages with their IDs
update_media_buy
Modify an existing campaign.
Request:
{
"media_buy_id": "mb_abc123",
"updates": {
"budget_change": 5000,
"end_time": "2024-04-30T23:59:59Z",
"status": "paused"
}
}
Key fields:
media_buy_id(string, required): The campaign to updateupdates(object): Changes to apply – budget_change, end_time, status, targeting, etc.
sync_creatives
Upload and manage creative assets.
Request:
{
"creatives": [
{
"creative_id": "hero_video_30s",
"name": "Brand Hero Video",
"format_id": {
"agent_url": "https://creative.adcontextprotocol.org",
"id": "video_standard_30s"
},
"assets": {
"video": {
"url": "https://cdn.example.com/hero.mp4",
"width": 1920,
"height": 1080,
"duration_ms": 30000
}
}
}
],
"assignments": {
"hero_video_30s": ["pkg_001", "pkg_002"]
}
}
Key fields:
creatives(array, required): Creative assets to synccreative_id: Your unique identifierformat_id: Object withagent_urlandidfrom format specificationsassets: Asset content (video, image, html, etc.)
assignments(object, optional): Map creative_id to package IDsdry_run(boolean): Preview changes without applyingdelete_missing(boolean): Archive creatives not in this sync
list_creatives
Query the creative library with filtering.
Request:
{
"filters": {
"status": ["active"],
"format_types": ["video"]
},
"limit": 20
}
get_media_buy_delivery
Retrieve performance metrics for a campaign.
Request:
{
"media_buy_id": "mb_abc123",
"granularity": "daily",
"date_range": {
"start": "2024-01-01",
"end": "2024-01-31"
}
}
Response contains:
delivery: Aggregated metrics (impressions, spend, clicks, etc.)by_package: Breakdown by packagetimeseries: Data points over time if granularity specified
Key Concepts
Brand Manifest
Brand context can be provided in two ways:
- URL reference (recommended):
{
"brand_manifest": {
"url": "https://brand.com"
}
}
- Inline manifest:
{
"brand_manifest": {
"name": "Brand Name",
"url": "https://brand.com",
"tagline": "Brand tagline",
"colors": { "primary": "#FF0000" }
}
}
Format IDs
Creative format identifiers are structured objects:
{
"format_id": {
"agent_url": "https://creative.adcontextprotocol.org",
"id": "display_300x250"
}
}
The agent_url specifies which creative agent defines the format. Use https://creative.adcontextprotocol.org for standard IAB formats.
Pricing Options
Products include pricing_options array. Each option has:
pricing_option_id: Use this increate_media_buypricing_model: “cpm”, “cpm-auction”, “flat-fee”, etc.price: Base price (for fixed pricing)floor: Minimum bid (for auction)
For auction pricing, include bid_price in your package.
Asynchronous Operations
Operations like create_media_buy and sync_creatives may require human approval. The response includes:
status: "pending"– Operation awaiting approvaltask_id– For tracking async progress
Poll or use webhooks to check completion status.
Error Handling
Common error patterns:
- 400 Bad Request: Invalid parameters – check required fields
- 401 Unauthorized: Invalid or missing authentication token
- 404 Not Found: Invalid product_id, media_buy_id, or creative_id
- 422 Validation Error: Schema validation failure – check field types
Error responses include:
{
"errors": [
{
"code": "VALIDATION_ERROR",
"message": "budget must be greater than 0",
"field": "packages[0].budget"
}
]
}
Testing Mode
For testing without real transactions, agents may support:
X-Dry-Run: trueheader – Preview without side effects- Test products with
test: trueflag - Sandbox environments
Ask the agent about testing capabilities before creating real campaigns.