Automate your advertising campaigns with AI. This skill enables OpenClaw agents to discover ad inventory, launch campaigns, manage creatives, and optimize performance across display, video, CTV, audio, and more - all through natural language commands.
No dashboards. No forms. No ad platform expertise required.
Marketing teams running Facebook ads, Google ads, and multi-channel campaigns
Media buyers managing programmatic ad spend across publishers
Agencies automating client campaign management and reporting
E-commerce brands launching product ads and retargeting campaigns
Startups running lean marketing with AI-powered automation
Skip the learning curve - No need to master complex ad platforms
Save time - Launch in 5 minutes vs. hours of manual setup
Spend smarter - AI automatically optimizes budgets to top performers
Scale faster - Manage unlimited campaigns through simple commands
Test risk-free - Public test agent included, no setup required
Official AdCP Repository: https://github.com/adcontextprotocol/adcp
Official AdCP Documentation: https://docs.adcontextprotocol.org
Complete Documentation Index: https://docs.adcontextprotocol.org/llms.txt
Trigger this skill when users ask about:
Campaign Management
Ad Discovery & Media Buying
Creative Management
Performance & Optimization
Targeting & Audiences
No setup required. Use the included test agent to try everything:
Step 1: Discover what's available
"Show me advertising capabilities"
Browse available channels, publishers, and formats.
Step 2: Find ad inventory
"Find display ads for a tech startup, budget $5000"
AI searches and shows matching products with pricing.
Step 3: Launch campaign
"Create campaign with Product prod_123, $5000 budget, targeting California tech professionals"
Campaign goes live instantly.
Step 4: Upload your ads
"Upload these banner images as creatives"
Drop files, get instant creative IDs.
Step 5: Monitor performance
"Show campaign metrics and ROI"
Real-time impressions, clicks, CTR, spend.
Quick campaign launch:
User: "I need to run display ads for my SaaS product"
Agent: [Discovers products] "Found 5 display packages. Want details?"
User: "Create campaign with Product 1, $10k budget, target CTOs"
Agent: [Creates campaign] "Campaign live! ID: mb_abc123"
Performance optimization:
User: "How are my video ads performing?"
Agent: [Shows metrics] "Package A: 2.3% CTR, Package B: 0.8% CTR"
User: "Move $5k from B to A"
Agent: [Reallocates] "Budget updated. Package A now $15k"
Multi-channel campaign:
User: "Launch omnichannel campaign: display in CA, video in NYC, $50k total"
Agent: [Creates packages] "3 packages created across display and video"
Speak naturally. The skill understands:
1. Discovery Phase
"Find video advertising for luxury brands"
↓ Agent searches inventory
↓ Shows matched products with pricing
↓ Explains targeting and formats
2. Campaign Creation
"Create campaign with Product 1, $25k, target professionals"
↓ Agent creates media buy
↓ Sets up targeting overlay
↓ Returns campaign ID and status
3. Creative Management
"Upload my banner ads"
↓ Agent syncs creatives
↓ Assigns to campaign
↓ Returns creative IDs
4. Monitoring & Optimization
"Show performance"
↓ Agent fetches delivery data
↓ Shows metrics by package/creative
↓ Suggests optimizations
const campaign = await testAgent.createMediaBuy({
buyer_ref: 'campaign-2026-q1',
brand_manifest: { url: 'https://acme.com' },
packages: [{ product_id: 'premium_display', budget: 10000 }]
});
await testAgent.syncCreatives({
creatives: [{
buyer_ref: 'banner-300x250',
url: 'https://cdn.acme.com/banner.jpg'
}]
});
const delivery = await testAgent.getMediaBuyDelivery({
media_buy_id: 'mb_abc123'
});
console.log(`CTR: ${delivery.totals.ctr}%, Spend: $${delivery.totals.spend}`);
See REFERENCE.md for complete API docs and EXAMPLES.md for detailed workflows.
AdCP provides 8 standardized tasks for the complete advertising lifecycle. Learn more in the Media Buy Protocol documentation.
Complete task reference: https://docs.adcontextprotocol.org/docs/media-buy/task-reference/
Brand context can be provided two ways:
URL reference (recommended - agent fetches brand info):
{
"brand_manifest": {
"url": "https://brand.com"
}
}
Inline manifest (full brand details):
{
"brand_manifest": {
"name": "Brand Name",
"url": "https://brand.com",
"tagline": "Brand tagline",
"colors": { "primary": "#FF0000" },
"logo": { "url": "https://cdn.brand.com/logo.png" }
}
}
Products support various pricing models:
For auction pricing, include bid_price in your package.
AdCP is not a real-time protocol. Operations may take:
Always check the status field in responses:
completed - Operation finished successfullypending - Awaiting approval or processingfailed - Operation failed (check error details)Apply targeting overlays to campaigns:
{
targeting_overlay: {
geo: {
included: ['US-CA', 'US-NY'], // DMA codes or regions
excluded: ['US-TX']
},
demographics: {
age_ranges: [{ min: 25, max: 44 }],
genders: ['M', 'F']
},
behavioral: {
interests: ['technology', 'gaming'],
purchase_intent: ['consumer_electronics']
},
contextual: {
keywords: ['innovation', 'design'],
categories: ['IAB19'] // Technology & Computing
}
}
}
// 1. Discover capabilities
const caps = await agent.getAdcpCapabilities({});
// 2. Find products
const products = await agent.getProducts({
brief: 'Q1 2026 brand awareness campaign for tech startup',
brand_manifest: { url: 'https://startup.com' },
filters: { channels: ['display', 'video'] }
});
// 3. Check creative formats
const formats = await agent.listCreativeFormats({
format_types: ['display', 'video']
});
// 4. Create campaign
const campaign = await agent.createMediaBuy({
buyer_ref: 'q1-2026-awareness',
brand_manifest: { url: 'https://startup.com' },
packages: [
{
buyer_ref: 'pkg-001',
product_id: products.products[0].product_id,
pricing_option_id: 'cpm-standard',
budget: 15000
}
],
start_time: { type: 'asap' },
end_time: '2026-03-31T23:59:59Z'
});
// 5. Upload creatives
await agent.syncCreatives({
creatives: [...], // Your creative assets
assignments: {
'creative_001': ['pkg-001']
}
});
// 6. Monitor performance
const delivery = await agent.getMediaBuyDelivery({
media_buy_id: campaign.media_buy_id
});
// Pause, adjust budget, and resume campaign
await agent.updateMediaBuy({
media_buy_id: 'mb_abc123',
updates: {
status: 'paused',
budget_change: 5000, // Add $5000
end_time: '2026-04-30T23:59:59Z'
}
});
// Resume after adjustments
await agent.updateMediaBuy({
media_buy_id: 'mb_abc123',
updates: { status: 'active' }
});
More workflow examples: See EXAMPLES.md for complete campaign scenarios including creative management, multi-channel campaigns, and optimization workflows.
For development and testing, use the public test agent:
Agent URL: https://test-agent.adcontextprotocol.org/mcp
Auth Token: 1v8tAhASaUYYp4odoQ1PnMpdqNaMiTrCRqYo9OJp6IQ
import { testAgent } from '@adcp/client/testing';
// No authentication needed for test agent
const result = await testAgent.getProducts({
brief: 'Test campaign',
brand_manifest: { url: 'https://example.com' }
});
Interactive testing available at: testing.adcontextprotocol.org
Common error patterns:
400 Bad Request - Invalid parameters:
{
"error": {
"code": "VALIDATION_ERROR",
"message": "budget must be greater than 0",
"field": "packages[0].budget"
}
}
401 Unauthorized - Missing or invalid auth:
{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid authentication token"
}
}
404 Not Found - Invalid ID reference:
{
"error": {
"code": "NOT_FOUND",
"message": "Product not found",
"resource": "product_id: premium_video_30s"
}
}
Always check for errors before processing responses:
if (result.error) {
console.error(`Error: ${result.error.message}`);
return;
}
Call get_adcp_capabilities first to understand what the agent supports before making other requests.
Use descriptive buyer_ref values for tracking:
'campaign-2026-q1-tech-launch''c1', 'test', 'abc'Check status field and implement polling for pending operations:
let status = 'pending';
while (status === 'pending') {
await sleep(5000); // Wait 5 seconds
const update = await agent.getMediaBuyDelivery({
media_buy_id: campaign.media_buy_id
});
status = update.status;
}
Better briefs lead to better product matches:
'Premium video inventory for luxury automotive brand targeting high-income professionals aged 35-54 in major metros. Focus on brand awareness with completion rates above 70%.''video ads', 'need advertising'Always check list_creative_formats to ensure your creatives meet requirements before uploading.
Regularly check delivery metrics to ensure campaigns are pacing properly:
const delivery = await agent.getMediaBuyDelivery({
media_buy_id: campaign.media_buy_id
});
const pacing = delivery.delivery.spend / delivery.delivery.budget;
console.log(`Budget pacing: ${(pacing * 100).toFixed(1)}%`);
pending statusget_adcp_capabilities firstFor help with AdCP:
共 1 个版本