diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..522b7d12 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,11 @@ +{ + "printWidth": 100, + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": false, + "trailingComma": "es5", + "bracketSpacing": true, + "htmlWhitespaceSensitivity": "ignore", + "endOfLine": "lf" +} diff --git a/package-lock.json b/package-lock.json index 14a3a278..32a5d1bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,8 +43,10 @@ "glob": "^11.1.0", "husky": "^9.1.7", "jest": "^30.2.0", + "js-beautify": "^1.15.4", "mintlify": "^4.2.240", "msw": "^2.12.4", + "prettier": "^3.7.4", "puppeteer": "^24.33.0", "supertest": "^7.1.4", "ts-jest": "^29.4.6", @@ -801,6 +803,22 @@ "semver": "^7.5.3" } }, + "node_modules/@changesets/apply-release-plan/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@changesets/assemble-release-plan": { "version": "6.0.9", "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz", @@ -1022,6 +1040,22 @@ "prettier": "^2.7.1" } }, + "node_modules/@changesets/write/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@emnapi/core": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", @@ -4485,6 +4519,13 @@ "node": ">= 8" } }, + "node_modules/@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", + "dev": true, + "license": "MIT" + }, "node_modules/@open-draft/deferred-promise": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", @@ -8194,6 +8235,16 @@ "react-dom": ">=18" } }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -10167,6 +10218,17 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -10806,6 +10868,51 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/editorconfig": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "9.0.1", + "semver": "^7.5.3" + }, + "bin": { + "editorconfig": "bin/editorconfig" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -15173,6 +15280,115 @@ "node": ">=10" } }, + "node_modules/js-beautify": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.4.tgz", + "integrity": "sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "config-chain": "^1.1.13", + "editorconfig": "^1.0.4", + "glob": "^10.4.2", + "js-cookie": "^3.0.5", + "nopt": "^7.2.1" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/js-beautify/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/js-beautify/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-beautify/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-beautify/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/js-beautify/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -17249,6 +17465,22 @@ "dev": true, "license": "MIT" }, + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -18350,16 +18582,16 @@ } }, "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", + "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "dev": true, "license": "MIT", "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -18430,6 +18662,13 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "license": "ISC" + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", diff --git a/package.json b/package.json index 35f3639d..1b4a0ec0 100644 --- a/package.json +++ b/package.json @@ -71,8 +71,10 @@ "glob": "^11.1.0", "husky": "^9.1.7", "jest": "^30.2.0", + "js-beautify": "^1.15.4", "mintlify": "^4.2.240", "msw": "^2.12.4", + "prettier": "^3.7.4", "puppeteer": "^24.33.0", "supertest": "^7.1.4", "ts-jest": "^29.4.6", diff --git a/server/public/design-system.css b/server/public/design-system.css index a2033202..ccbdf84b 100644 --- a/server/public/design-system.css +++ b/server/public/design-system.css @@ -957,6 +957,39 @@ body { text-decoration: underline; } +/* Hero Points - Vertical cards with frosted glass effect */ +.hero-point { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + background: rgba(255, 255, 255, 0.5); + border: none; + border-radius: var(--radius-lg); + padding: var(--space-6); + backdrop-filter: blur(10px); + transition: var(--transition-all); +} + +.hero-point:hover { + background: rgba(255, 255, 255, 0.65); + transform: translateY(-2px); +} + +.hero-point-icon { + font-size: var(--text-3xl); + margin-bottom: var(--space-2); +} + +.hero-point-text { + display: flex; + flex-direction: column; + align-items: center; + max-width: 240px; + font-size: var(--text-lg); + line-height: var(--leading-tight); +} + /* ----------------------------------------------------------------------------- 12.2 Buttons diff --git a/server/public/index.html b/server/public/index.html index b99cffdf..d37fd13f 100644 --- a/server/public/index.html +++ b/server/public/index.html @@ -1,263 +1,680 @@ + - -AdCP - Open Standard for Advertising Workflows - - - - - - - - - - - - - - - - - - - + + .releaseText_vBj7 { + margin-right: var(--space-2) !important; + } + + /* Override Docusaurus green theme colors with blue */ + :root { + --ifm-color-primary: #1a36b4 !important; + --ifm-color-primary-dark: #172fa0 !important; + --ifm-color-primary-darker: #152c97 !important; + --ifm-color-primary-darkest: #11247c !important; + --ifm-color-primary-light: #1d3dc8 !important; + --ifm-color-primary-lighter: #1f40d1 !important; + --ifm-color-primary-lightest: #2a4fec !important; + } + + /* Get Started section fixes */ + .getStartedSection_vPGY { + background: linear-gradient(135deg, var(--color-primary-700, #172fa0) 0%, var(--color-brand, #1a36b4) 100%); + } + + .getStartedSection_vPGY .sectionTitle_Ut5p, + .getStartedSection_vPGY .sectionSubtitle_AZuW { + color: white !important; + } + + .getStartedSection_vPGY .sectionSubtitle_AZuW { + opacity: 0.9; + } + + /* Consistent button styling in audience cards */ + .audienceCard_fWZI .button--primary { + background-color: var(--color-brand, #1a36b4) !important; + border-color: var(--color-brand, #1a36b4) !important; + color: white !important; + } + + .audienceCard_fWZI .button--outline { + background-color: transparent !important; + border-color: var(--color-brand, #1a36b4) !important; + color: var(--color-brand, #1a36b4) !important; + } + + .audienceCard_fWZI .button--outline:hover { + background-color: rgba(26, 54, 180, 0.1) !important; + } + + /* Hero section spacing and typography */ + .heroBanner_qdFl { + padding-top: var(--space-16) !important; + padding-bottom: var(--space-16) !important; + background: var(--color-primary-100) !important; + } + + .heroBanner_qdFl h1 { + color: var(--color-gray-950) !important; + } + + .heroBanner_qdFl p, + .heroBanner_qdFl .hero-point-text { + color: var(--color-text-heading) !important; + } + + .heroBanner_qdFl strong { + color: var(--color-gray-950) !important; + } + + .heroBanner_qdFl .button--primary { + background-color: var(--color-primary-900) !important; + border-color: var(--color-primary-900) !important; + color: white !important; + } + + .heroBanner_qdFl .button--primary:hover { + background-color: var(--color-primary-800) !important; + border-color: var(--color-primary-800) !important; + } + + .heroBanner_qdFl .button--secondary { + background-color: transparent !important; + border-color: var(--color-primary-900) !important; + color: var(--color-primary-900) !important; + } + + .heroBanner_qdFl .button--secondary:hover { + background-color: rgba(15, 31, 107, 0.1) !important; + } + + .buttons_AeoN .margin-right--md { + margin-right: var(--space-3) !important; + } + + .heroTitle_qg2I { + margin-bottom: var(--space-4) !important; + max-width: 700px !important; + margin-left: auto !important; + margin-right: auto !important; + line-height: var(--leading-tight) !important; + } + + .heroSubtitle_jFu1 { + margin-bottom: var(--space-4) !important; + max-width: 650px !important; + margin-left: auto !important; + margin-right: auto !important; + line-height: var(--leading-tight) !important; + } + + .heroPoints_gRrZ { + margin-bottom: var(--space-16) !important; + gap: var(--space-6) !important; + } + + .buttons_AeoN { + margin-top: 0 !important; + display: flex !important; + flex-direction: column !important; + align-items: center !important; + } + + - -
- - - - - -

AdCP: The Open Standard for Agentic Advertising

From brief to buy, helping agents advertise anywhere: from CTV to chat, from tiny blog to the World Cup.

🎯
Built for outcomes
Buy the way you want to grow
🤖
Built for agents
Supports MCP and A2A protocols
🌍
Built for everyone
A diverse ecosystem of tech and content
v2.5.0 ReleasedDeveloper experience and API refinement: type safety, batch previews (5-10x faster), schema versioning, and more!Read the release notes →

Why we built AdCP

The advertising ecosystem is fragmented. Every platform has its own API, its own workflow, its own reporting format. Media buyers and agencies waste countless hours navigating this complexity.

The Integration Problem

Each new platform requires custom integration work. APIs change, documentation varies, and maintenance never ends. Teams spend more time on plumbing than on strategy.

The Discovery Problem

Inventory is scattered across platforms with different taxonomies and targeting options. Finding the right audiences means learning multiple systems and manually comparing options.

The Automation Problem

AI agents and automation tools can't easily interact with advertising platforms. Each integration is bespoke, limiting the potential of AI-powered workflows.

We believe there's a better way. A single protocol that any platform can implement and any tool can use. An open standard that makes advertising technology work together, not against each other.

Agentic Advertising

Managed by Agentic Advertising

AdCP is stewarded by Agentic Advertising (AAO), an industry trade association advancing open standards for AI-powered advertising. AAO brings together publishers, platforms, agencies, and technology providers to shape the future of the ecosystem.

Limited time: Founding member pricing ends March 31, 2026

One protocol. Every platform. Total control.

AdCP is the open standard that unifies advertising workflows across all platforms.
Think of it as the USB-C of advertising technology.

Before AdCP

  • 15+ different platform APIs
  • Months of custom integration
  • Manual data reconciliation
  • Fragmented reporting
  • Vendor lock-in

With AdCP

  • One unified interface
  • Deploy in days
  • Automated workflows
  • Consolidated analytics
  • Complete flexibility

See the difference

Traditional Workflow

1. Log into Platform A
2. Search for audiences (30 min)
3. Export to spreadsheet
4. Log into Platform B
5. Manually recreate targeting
6. Wait for approval (2 days)
7. Repeat for 10 more platforms...

AdCP Workflow

"Find sports enthusiasts with
high purchase intent, compare
prices across all platforms,
and activate the best option."

✓ Done in minutes

Everything you need, production-ready

AdCP v2.5.0 includes a complete suite of capabilities for modern advertising workflows.

🛒 Media Buy Protocol

Complete campaign lifecycle management with 9 core tasks:

  • get_products - Discover inventory with natural language
  • create_media_buy - Launch campaigns across platforms
  • get_media_buy_delivery - Real-time performance metrics
  • Plus sync, update, feedback, and more

🎨 Creative Protocol

AI-powered creative generation and management:

  • build_creative - Generate creatives from briefs
  • preview_creative - Visual preview generation
  • list_creative_formats - Discover format specs
  • Standard formats library included

📊 Signals Protocol

First-party data integration:

  • get_signals - Discover available signals
  • activate_signal - Activate for campaigns
  • Privacy-first audience building
  • Platform-agnostic data sharing

⚡ Protocol Features

Enterprise-ready infrastructure:

  • MCP & A2A protocol support
  • Async workflows with webhooks
  • Human-in-the-loop approval
  • JSON Schema validation

How AdCP works

Built on the Model Context Protocol (MCP), AdCP provides a unified interface for advertising operations across any platform.

1

Discovery

Use natural language to describe your target audience. AdCP searches across all connected platforms to find matching inventory and audiences.

"Find sports enthusiasts interested in running gear"
2

Comparison

Get standardized results from all platforms in a consistent format. Compare pricing, reach, and targeting capabilities side by side.

Platform A: $12 CPM • 2.3M reach
Platform B: $18 CPM • 4.1M reach
Platform C: $9 CPM • 1.8M reach
3

Activation

Launch campaigns across multiple platforms with a single command. AdCP handles the technical details while maintaining platform-specific optimizations.

"Activate on Platform B with $10,000 budget"
4

Management

Monitor performance, adjust budgets, and generate reports across all platforms from one interface. Set up automated rules and alerts.

"Show performance metrics for all active campaigns"

Ready to join the revolution?

Whether you're a platform provider or an advertiser, AdCP is your path to the future of advertising.

Platform Providers

Make your inventory accessible to every AI assistant and automation platform.

  • Enable AI-powered workflows for your inventory
  • Simplify integration with a standard protocol
  • Reach new customers through automation platforms
Explore the Spec

Open source • MIT licensed

Advertisers & Agencies

Start using natural language to manage campaigns across all platforms.

  • Manage campaigns with natural language
  • Access unified analytics across platforms
  • Build on open standards, avoid vendor lock-in
Start Building Today

Documentation & guides

Join the conversation

AdCP is an open standard developed in collaboration with the advertising community. We're building this together, and your input matters.

Open Development

All development happens in the open on GitHub. Watch progress, submit issues, and contribute code.

Working Group

Join monthly meetings to discuss protocol evolution, implementation challenges, and future directions.

Implementation Support

Get help implementing AdCP for your platform or building tools that use the protocol.

- - + +
+ + + + + + + + + +
+
+
+
+
+
+

The Open Standard for Agentic Advertising

+

AdCP is an open-source, interoperable protocol designed to make buying and selling digital media more autonomous for all.

+
+
+
🎯
+
Built for outcomes Buy based on actual results and revenue, not just impressions.
+
+
+
🤖
+
Built for agents Native support for AI assistants via MCP and A2A protocols.
+
+
+
🌍
+
Built for everyone Open standard for platforms, from CTV networks to blogs.
+
+
+ +
+
+
+
+
+
+
+
v2.5.0 ReleasedDeveloper experience and API refinement: type safety, batch previews (5-10x faster), schema versioning, and more!Read the release notes →
+
+
+
+
+
+
+
+

Why we built AdCP

+

The advertising ecosystem is fragmented. Every platform has its own API, its own workflow, its own reporting format. Media buyers and agencies waste countless hours navigating this complexity.

+
+
+

The Integration Problem

+

Each new platform requires custom integration work. APIs change, documentation varies, and maintenance never ends. Teams spend more time on plumbing than on strategy.

+
+
+

The Discovery Problem

+

Inventory is scattered across platforms with different taxonomies and targeting options. Finding the right audiences means learning multiple systems and manually comparing options.

+
+
+

The Automation Problem

+

AI agents and automation tools can't easily interact with advertising platforms. Each integration is bespoke, limiting the potential of AI-powered workflows.

+
+
+
+

We believe there's a better way. A single protocol that any platform can implement and any tool can use. An open standard that makes advertising technology work together, not against each other.

+
+
+
+
+
+
+
+
+
+
+
+
+
Agentic Advertising
+
+

Managed by Agentic Advertising

+

AdCP is stewarded by Agentic Advertising (AAO), an industry trade association advancing open standards for AI-powered advertising. AAO brings together publishers, platforms, agencies, and technology providers to shape the future of the ecosystem.

+ +

Limited time: Founding member pricing ends March 31, 2026

+
+
+
+
+
+
+
+ +
+
+
+
+

One protocol. Every platform. Total control.

+

AdCP is the open standard that unifies advertising workflows across all platforms.
Think of it as the USB-C of advertising technology.

+
+
+

Before AdCP

+
    +
  • 15+ different platform APIs
  • +
  • Months of custom integration
  • +
  • Manual data reconciliation
  • +
  • Fragmented reporting
  • +
  • Vendor lock-in
  • +
+
+
+

With AdCP

+
    +
  • One unified interface
  • +
  • Deploy in days
  • +
  • Automated workflows
  • +
  • Consolidated analytics
  • +
  • Complete flexibility
  • +
+
+
+
+

See the difference

+
+
+

Traditional Workflow

1. Log into Platform A
2. Search for audiences (30 min)
3. Export to spreadsheet
4. Log into Platform B
5. Manually recreate targeting
6. Wait for approval (2 days)
7. Repeat for 10 more platforms...
+
+
+

AdCP Workflow

"Find sports enthusiasts with
high purchase intent, compare
prices across all platforms,
and activate the best option."

✓ Done in minutes
+
+
+
+
+
+
+
+
+
+
+
+

Everything you need, production-ready

+

AdCP v2.5.0 includes a complete suite of capabilities for modern advertising workflows.

+
+
+

🛒 Media Buy Protocol

+

Complete campaign lifecycle management with 9 core tasks:

+
    +
  • get_products - Discover inventory with natural language
  • +
  • create_media_buy - Launch campaigns across platforms
  • +
  • get_media_buy_delivery - Real-time performance metrics
  • +
  • Plus sync, update, feedback, and more
  • +
+
+
+

🎨 Creative Protocol

+

AI-powered creative generation and management:

+
    +
  • build_creative - Generate creatives from briefs
  • +
  • preview_creative - Visual preview generation
  • +
  • list_creative_formats - Discover format specs
  • +
  • Standard formats library included
  • +
+
+
+

📊 Signals Protocol

+

First-party data integration:

+
    +
  • get_signals - Discover available signals
  • +
  • activate_signal - Activate for campaigns
  • +
  • Privacy-first audience building
  • +
  • Platform-agnostic data sharing
  • +
+
+
+

⚡ Protocol Features

+

Enterprise-ready infrastructure:

+
    +
  • MCP & A2A protocol support
  • +
  • Async workflows with webhooks
  • +
  • Human-in-the-loop approval
  • +
  • JSON Schema validation
  • +
+
+
+
+
+
+
+
+
+
+
+

How AdCP works

+

Built on the Model Context Protocol (MCP), AdCP provides a unified interface for advertising operations across any platform.

+
+
+
1
+
+

Discovery

+

Use natural language to describe your target audience. AdCP searches across all connected platforms to find matching inventory and audiences.

"Find sports enthusiasts interested in running gear" +
+
+
+
2
+
+

Comparison

+

Get standardized results from all platforms in a consistent format. Compare pricing, reach, and targeting capabilities side by side.

Platform A: $12 CPM • 2.3M reach
Platform B: $18 CPM • 4.1M reach
Platform C: $9 CPM • 1.8M reach
+
+
+
+
3
+
+

Activation

+

Launch campaigns across multiple platforms with a single command. AdCP handles the technical details while maintaining platform-specific optimizations.

"Activate on Platform B with $10,000 budget" +
+
+
+
4
+
+

Management

+

Monitor performance, adjust budgets, and generate reports across all platforms from one interface. Set up automated rules and alerts.

"Show performance metrics for all active campaigns" +
+
+
+
+
+
+
+
+
+
+
+

Ready to join the revolution?

+

Whether you're a platform provider or an advertiser, AdCP is your path to the future of advertising.

+
+
+

Platform Providers

+

Make your inventory accessible to every AI assistant and automation platform.

+
    +
  • Enable AI-powered workflows for your inventory
  • +
  • Simplify integration with a standard protocol
  • +
  • Reach new customers through automation platforms
  • +
+
Explore the Spec +

Open source • MIT licensed

+
+
+
+

Advertisers & Agencies

+

Start using natural language to manage campaigns across all platforms.

+
    +
  • Manage campaigns with natural language
  • +
  • Access unified analytics across platforms
  • +
  • Build on open standards, avoid vendor lock-in
  • +
+
Start Building Today +

Documentation & guides

+
+
+
+
+
+
+
+
+
+
+
+

Join the conversation

+

AdCP is an open standard developed in collaboration with the advertising community. We're building this together, and your input matters.

+
+
+

Open Development

+

All development happens in the open on GitHub. Watch progress, submit issues, and contribute code.

+
+
+

Working Group

+

Join monthly meetings to discuss protocol evolution, implementation challenges, and future directions.

+
+
+

Implementation Support

+

Get help implementing AdCP for your platform or building tools that use the protocol.

+
+
+ +
+
+
+
+ +
+ + + + \ No newline at end of file