Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
a8723be
feat: add unified assets field for better asset discovery
BaiyuScope3 Dec 24, 2025
e5fb70d
Merge main into feature/assets-optional-discovery
BaiyuScope3 Jan 2, 2026
e2b0b62
Add changeset for assets field feature
BaiyuScope3 Jan 2, 2026
e4ed839
fix: update CI to use .cjs extension for check-testable-snippets
BaiyuScope3 Jan 2, 2026
e7bbaac
fix: update docs to reference assets field instead of assets_optional
BaiyuScope3 Jan 2, 2026
619ca3e
docs: keep assets_required as deprecated alongside new assets field
BaiyuScope3 Jan 2, 2026
7681bfb
schema: add formal deprecated: true to assets_required field
BaiyuScope3 Jan 2, 2026
0bbdf28
schema: make 'required' field mandatory in assets array
BaiyuScope3 Jan 2, 2026
c8a4487
schema: make 'required' field mandatory in nested repeatable_group as…
BaiyuScope3 Jan 2, 2026
8261125
docs: add deprecated assets_required examples with deprecation comments
BaiyuScope3 Jan 2, 2026
7c9c9f9
ci: add 2.6.x branch to all workflows
BaiyuScope3 Jan 2, 2026
90360e1
Merge pull request #490 from adcontextprotocol/feature/assets-optiona…
BaiyuScope3 Jan 5, 2026
f553726
Merge main into 2.6.x
BaiyuScope3 Jan 5, 2026
dba91d1
docs: update intro and schema-versioning for 2.6.0
BaiyuScope3 Jan 5, 2026
f002b01
Merge pull request #634 from adcontextprotocol/feature/2.6.x-merge-main
BaiyuScope3 Jan 5, 2026
8a3e2c4
fix: detect untracked files in sync-versioned-docs workflow
BaiyuScope3 Jan 5, 2026
f6752f2
Merge pull request #636 from adcontextprotocol/feature/fix-sync-workflow
BaiyuScope3 Jan 5, 2026
d767730
fix: create PR instead of pushing directly to main
BaiyuScope3 Jan 5, 2026
adc43f5
Merge pull request #637 from adcontextprotocol/feature/fix-sync-workflow
BaiyuScope3 Jan 5, 2026
6e33c21
chore: merge main into 2.6.x
BaiyuScope3 Jan 7, 2026
fcb13f2
chore: regenerate dist/schemas/2.6.0 with additionalProperties: true
BaiyuScope3 Jan 7, 2026
1e3324e
Merge pull request #671 from adcontextprotocol/feature/merge-main-int…
BaiyuScope3 Jan 7, 2026
c94fe34
feat: Add typed extensions infrastructure with auto-discovery (#648)
bokelley Jan 9, 2026
5cd83b8
Add Property Governance Protocol for AdCP 3.0 (#588)
bokelley Jan 12, 2026
131d3f9
Merge pull request #758 from adcontextprotocol/main
BaiyuScope3 Jan 13, 2026
c453bc5
build: rebuild dist/schemas/2.6.0 with impressions and paused fields
BaiyuScope3 Jan 13, 2026
0adcf07
Merge pull request #759 from adcontextprotocol/fix/rebuild-2.6.0-sche…
BaiyuScope3 Jan 13, 2026
74c4ace
refactor: replace creative_ids with creative_assignments (#794)
bokelley Jan 16, 2026
d3b5048
feat: Add privacy_policy_url to brand manifest and adagents.json (#801)
bokelley Jan 18, 2026
abfe9eb
feat: Add OpenAI Commerce integration to brand manifest (#802)
bokelley Jan 18, 2026
6afd173
Add Content Standards Protocol (#621)
bokelley Jan 18, 2026
20c0b62
feat: Add content standards create/update schemas and languages field…
bokelley Jan 20, 2026
328a1fd
fix: Convert governance docs to relative links (#820)
bokelley Jan 20, 2026
533b6ab
fix: Mintlify callout syntax and case-insensitivity docs (#834)
bokelley Jan 20, 2026
281b49e
chore: merge main into 2.6.x-catchup, resolve conflicts
BaiyuScope3 Jan 20, 2026
e3e3a42
Merge pull request #836 from adcontextprotocol/2.6.x-catchup
BaiyuScope3 Jan 21, 2026
b6b090d
fix: Remove redundant singular filter fields from creative-filters sc…
bokelley Jan 22, 2026
e466ece
feat: Add 'archived' status to creative-status enum (#847)
bokelley Jan 23, 2026
57e56de
Add Media Channel Taxonomy (#811)
bokelley Jan 23, 2026
ce8fa03
docs: Add campaign lifecycle sequence diagram to property governance …
bokelley Jan 24, 2026
4fe8f57
docs: Document property_features for governance agent discovery (#855)
bokelley Jan 24, 2026
98858d3
feat: Add get_capabilities task for expanded capability discovery (#850)
bokelley Jan 24, 2026
1a9402b
chore: merge main into 2.6.x for release preparation
bokelley Jan 24, 2026
4c2f126
chore: overhaul docs versioning for 2.6.x release
bokelley Jan 24, 2026
9a259ce
chore: bump version to 3.0.0-beta.1
bokelley Jan 24, 2026
3a95032
chore: configure changesets for beta releases
bokelley Jan 24, 2026
61d45ff
docs: add 3.0.0-beta.1 release documentation
bokelley Jan 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 11 additions & 0 deletions .changeset/assets-discovery.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
"adcontextprotocol": minor
---

Add unified `assets` field to format schema for better asset discovery

- Add new `assets` array to format schema with `required` boolean per asset
- Deprecate `assets_required` (still supported for backward compatibility)
- Enables full asset discovery for buyers and AI agents to see all supported assets
- Optional assets like impression trackers can now be discovered and used

9 changes: 9 additions & 0 deletions .changeset/content-standards-fixes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
"adcontextprotocol": patch
---

Fix Mintlify callout syntax and add case-insensitivity notes for country/language codes

- Convert `:::note` Docusaurus syntax to Mintlify `<Note>` components
- Add case-insensitivity documentation for country codes (ISO 3166-1 alpha-2) and language codes (ISO 639-1/BCP 47)
- Remove orphaned webhook-config.json and webhook-authentication.json schemas
19 changes: 19 additions & 0 deletions .changeset/content-standards-protocol.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
"adcontextprotocol": minor
---

Add Content Standards Protocol for content safety and suitability evaluation.

Discovery tasks:
- `list_content_features`: Discover available content safety features
- `list_content_standards`: List available standards configurations
- `get_content_standards`: Retrieve content safety policies

Management tasks:
- `create_content_standards`: Create a new standards configuration
- `update_content_standards`: Update an existing configuration
- `delete_content_standards`: Delete a configuration

Calibration & Validation tasks:
- `calibrate_content`: Collaborative dialogue to align on policy interpretation
- `validate_content_delivery`: Batch validate delivery records
63 changes: 63 additions & 0 deletions .changeset/get-capabilities-task.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
---
"adcontextprotocol": minor
---

Add protocol-level get_adcp_capabilities task for cross-protocol capability discovery

Introduces `get_adcp_capabilities` as a **protocol-level task** that works across all AdCP domain protocols.

**Tool-based discovery:**
- AdCP discovery uses native MCP/A2A tool discovery
- Presence of `get_adcp_capabilities` tool indicates AdCP support
- Distinctive name ensures no collision with other protocols' capability tools
- Deprecates `adcp-extension.json` agent card extension

**Cross-protocol design:**
- `adcp.major_versions` - Declare supported AdCP major versions
- `supported_protocols` - Which domain protocols are supported (media_buy, signals)
- `extensions_supported` - Extension namespaces this agent supports (e.g., `["scope3", "garm"]`)
- Protocol-specific capability sections nested under protocol name

**Media-buy capabilities (media_buy section):**
- `features` - Optional features (inline_creative_management, property_list_filtering, content_standards)
- `execution.axe_integrations` - Agentic ad exchange URLs
- `execution.creative_specs` - VAST/MRAID version support
- `execution.targeting` - Geo targeting with granular system support
- `portfolio` - Publisher domains, channels, countries

**Geo targeting:**
- Countries (ISO 3166-1 alpha-2)
- Regions (ISO 3166-2)
- Metros with named systems (nielsen_dma, uk_itl1, uk_itl2, eurostat_nuts2)
- Postal areas with named systems encoding country and precision (us_zip, gb_outward, ca_fsa, etc.)

**Product filters - two models for geography:**

*Coverage filters (for locally-bound inventory like radio, OOH, local TV):*
- `countries` - country coverage (ISO 3166-1 alpha-2)
- `regions` - region coverage (ISO 3166-2) for regional OOH, local TV
- `metros` - metro coverage ({ system, code }) for radio, DOOH, DMA-based inventory

*Capability filters (for digital inventory with broad coverage):*
- `required_geo_targeting` - filter by seller capability with two-layer structure:
- `level`: targeting granularity (country, region, metro, postal_area)
- `system`: classification taxonomy (e.g., 'nielsen_dma', 'us_zip')
- `required_axe_integrations` - filter by AXE support
- `required_features` - filter by protocol feature support

Use coverage filters when products ARE geographically bound (radio station = DMA).
Use capability filters when products have broad coverage and you'll target at buy time.

**Targeting schema:**
- Updated `targeting.json` with structured geo systems
- `geo_metros` and `geo_postal_areas` now require system specification
- System names encode country and precision (us_zip, gb_outward, nielsen_dma, etc.)
- Aligns with capability declarations in get_adcp_capabilities

**Governance capabilities (governance section):**
- `property_features` - Array of features this governance agent can evaluate
- Each feature has: `feature_id`, `type` (binary/quantitative/categorical), optional `range`/`categories`
- `methodology_url` - Optional URL to methodology documentation (helps buyers understand/compare vendor approaches)
- Deprecates `list_property_features` task (schemas removed, doc page retained with migration guide)

**Capability contract:** If a capability is declared, the seller MUST honor it.
7 changes: 7 additions & 0 deletions .changeset/hip-numbers-train.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"adcontextprotocol": minor
---

Add privacy_policy_url field to brand manifest and adagents.json schemas

Enables consumer consent flows by providing a link to advertiser/publisher privacy policies. AI platforms can use this to present explicit privacy choices to users before data handoff. Works alongside MyTerms/IEEE P7012 discovery for machine-readable privacy terms.
15 changes: 15 additions & 0 deletions .changeset/loud-bushes-train.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
"adcontextprotocol": minor
---

Clarify creative handling in media buy operations:

**Breaking:** Replace `creative_ids` with `creative_assignments` in `create_media_buy` and `update_media_buy`
- `creative_assignments` supports optional `weight` and `placement_ids` for granular control
- Simple assignment: `{ "creative_id": "my_creative" }` (weight/placement optional)
- Advanced assignment: `{ "creative_id": "my_creative", "weight": 60, "placement_ids": ["p1"] }`

**Clarifications:**
- `creatives` array creates NEW creatives only (add `CREATIVE_ID_EXISTS` error)
- `delete_missing` in sync_creatives cannot delete creatives in active delivery (`CREATIVE_IN_ACTIVE_DELIVERY` error)
- Document that existing library creatives should be managed via `sync_creatives`
13 changes: 13 additions & 0 deletions .changeset/media-channel-taxonomy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
"adcontextprotocol": major
---

Add Media Channel Taxonomy specification with standardized channel definitions.

**BREAKING**: Replaces channel enum values (display, video, audio, native, retail → display, olv, social, search, ctv, etc.)

- Introduces 19 planning-oriented media channels representing how buyers allocate budget
- Channels: display, olv, social, search, ctv, linear_tv, radio, streaming_audio, podcast, dooh, ooh, print, cinema, email, gaming, retail_media, influencer, affiliate, product_placement
- Adds desktop_app property type for Electron/Chromium wrapper applications
- Clear distinction between channels (planning abstractions), property types (addressable surfaces), and formats (how ads render)
- Includes migration guide and edge cases documentation
9 changes: 9 additions & 0 deletions .changeset/openai-product-feed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
"adcontextprotocol": minor
---

Add OpenAI Commerce integration to brand manifest

- Add `openai_product_feed` as a supported feed format for product catalogs
- Add `agentic_checkout` object to enable AI agents to complete purchases via structured checkout APIs
- Document field mapping from Google Merchant Center to OpenAI Product Feed spec
8 changes: 8 additions & 0 deletions .changeset/pre.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"mode": "pre",
"tag": "beta",
"initialVersions": {
"adcontextprotocol": "3.0.0-beta.1"
},
"changesets": []
}
9 changes: 9 additions & 0 deletions .changeset/property-governance-protocol.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
"adcontextprotocol": minor
---

Add Property Governance Protocol support to get_products

- Add optional `property_list` parameter to get_products request for filtering products by property list
- Add `property_list_applied` response field to indicate whether filtering was applied
- Enables buyers to pass property lists from governance agents to sales agents for compliant inventory discovery
3 changes: 3 additions & 0 deletions .changeset/simplify-filters.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
---

4 changes: 4 additions & 0 deletions .changeset/tricky-ideas-try.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
---

docs: Document property_features field for governance agent discovery in adagents.json
4 changes: 4 additions & 0 deletions .changeset/whole-sides-join.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
---

Add 'archived' status to creative-status enum and document default exclusion behavior in list_creatives. Remove erroneous status field from assignment response (assignments are binary - they exist or don't). Replace approved boolean with status enum in creative-asset.json for consistency. Rename package_name to buyer_ref in assignment response to match package schema.
4 changes: 2 additions & 2 deletions .github/workflows/broken-links.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: Check for Broken Links

on:
push:
branches: [ main, develop ]
branches: [ main, develop, '2.6.x' ]
pull_request:
branches: [ main, develop ]
branches: [ main, develop, '2.6.x' ]
workflow_run:
workflows: ["Sync Versioned Docs"]
types:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/changeset-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Changeset Check

on:
pull_request:
branches: [main]
branches: [main, '2.6.x']

jobs:
check:
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/check-testable-snippets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ name: Check Testable Snippets

on:
pull_request:
branches: [main, '2.6.x']
paths:
- 'docs/**/*.md'
- 'docs/**/*.mdx'
Expand Down
155 changes: 155 additions & 0 deletions .github/workflows/release-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
name: Release Documentation Snapshot

on:
release:
types: [published]
workflow_dispatch:
inputs:
version:
description: 'Version to snapshot (e.g., 2.6.0)'
required: true
type: string

jobs:
snapshot-docs:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write

steps:
- name: Determine version
id: version
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
VERSION="${{ inputs.version }}"
else
# Extract version from tag (v3.0.0-beta.1 -> 3.0.0-beta.1)
VERSION="${GITHUB_REF_NAME#v}"
fi
echo "version=$VERSION" >> $GITHUB_OUTPUT

# Extract major.minor for docs.json version label
# For "3.0.0-beta.1" -> "3.0-beta"
# For "3.0.1" -> "3.0"
if [[ "$VERSION" == *"-"* ]]; then
# Has prerelease suffix (e.g., 3.0.0-beta.1 -> 3.0-beta)
BASE_VERSION=$(echo "$VERSION" | cut -d- -f1)
PRERELEASE_TAG=$(echo "$VERSION" | cut -d- -f2 | cut -d. -f1)
MAJOR_MINOR="$(echo "$BASE_VERSION" | cut -d. -f1,2)-$PRERELEASE_TAG"
else
# Standard version (e.g., 3.0.1 -> 3.0)
MAJOR_MINOR=$(echo "$VERSION" | cut -d. -f1,2)
fi
echo "major_minor=$MAJOR_MINOR" >> $GITHUB_OUTPUT

- name: Checkout main branch
uses: actions/checkout@v4
with:
ref: main
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}

- name: Fetch release tag
if: github.event_name != 'workflow_dispatch'
run: git fetch origin tag ${{ github.ref_name }}

- name: Create docs snapshot
run: |
VERSION="${{ steps.version.outputs.version }}"

# Determine source ref
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
SOURCE_REF="v$VERSION"
else
SOURCE_REF="${{ github.ref_name }}"
fi

# Create dist/docs directory if it doesn't exist
mkdir -p dist/docs

# Remove existing version if present (allows re-running)
rm -rf "dist/docs/$VERSION"

# Extract docs from the release tag
git archive "$SOURCE_REF" -- docs | tar -x -C "dist/docs/$VERSION" --strip-components=1 || {
mkdir -p "dist/docs/$VERSION"
git archive "$SOURCE_REF" -- docs | tar -x
mv docs/* "dist/docs/$VERSION/"
rmdir docs 2>/dev/null || true
}

echo "Created docs snapshot at dist/docs/$VERSION"
ls -la "dist/docs/$VERSION" | head -10

- name: Update docs.json
run: |
VERSION="${{ steps.version.outputs.version }}"
MAJOR_MINOR="${{ steps.version.outputs.major_minor }}"

# Check if this major.minor version already exists in docs.json
EXISTING=$(jq -r ".navigation.versions[] | select(.version == \"$MAJOR_MINOR\") | .version" docs.json)

if [ -n "$EXISTING" ]; then
echo "Version $MAJOR_MINOR already exists in docs.json, updating paths to $VERSION"
# Update existing version's paths to point to the new patch version
# Regex matches both standard (3.0.1) and prerelease (3.0.0-beta.1) versions
jq --arg old_pattern "dist/docs/[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z]+\\.[0-9]+)?/" \
--arg new_path "dist/docs/$VERSION/" \
--arg major_minor "$MAJOR_MINOR" \
'
def update_paths:
if type == "array" then
map(update_paths)
elif type == "object" then
if has("pages") then
.pages = (.pages | update_paths)
else
.
end
elif type == "string" then
if test("^dist/docs/[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z]+\\.[0-9]+)?/") then
sub("^dist/docs/[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z]+\\.[0-9]+)?/"; $new_path)
else
.
end
else
.
end;

.navigation.versions = [
.navigation.versions[] |
if .version == $major_minor then
.groups = (.groups | update_paths)
else
.
end
]
' docs.json > /tmp/updated-docs.json
mv /tmp/updated-docs.json docs.json
else
echo "Version $MAJOR_MINOR is new, adding to docs.json"
# This is a new major.minor version - would need manual nav structure
# For now, just log a warning
echo "::warning::New major.minor version $MAJOR_MINOR requires manual docs.json navigation setup"
fi

- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "chore: snapshot docs for v${{ steps.version.outputs.version }}"
title: "chore: snapshot docs for v${{ steps.version.outputs.version }}"
body: |
This PR creates a documentation snapshot for release v${{ steps.version.outputs.version }}.

**Changes:**
- Added `dist/docs/${{ steps.version.outputs.version }}/` with frozen documentation
- Updated `docs.json` to reference the new snapshot

Auto-generated by the release-docs workflow.
branch: auto/docs-v${{ steps.version.outputs.version }}
delete-branch: true
add-paths: |
dist/docs/${{ steps.version.outputs.version }}/
docs.json
1 change: 1 addition & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
push:
branches:
- main
- '2.6.x'

concurrency: ${{ github.workflow }}-${{ github.ref }}

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/schema-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: JSON Schema Validation

on:
push:
branches: [ main, develop ]
branches: [ main, develop, '2.6.x' ]
pull_request:
branches: [ main, develop ]
branches: [ main, develop, '2.6.x' ]

jobs:
schema-validation:
Expand Down
Loading
Loading