v5.0.0
Major Changes
- fc33966: BREAKING: TaskResult is now a discriminated union. Failed tasks use status:'failed' instead of 'completed'. MCP isError responses preserve structured data (adcp_error, context, ext) instead of throwing. Adds adcpError, correlationId, retryAfterMs convenience accessors and isRetryable()/getRetryDelay() utilities.
Minor Changes
-
5a3c835: Brand rights as a first-class server domain, plus creative-asset record shape alignment
Brand rights first-class domain.
createAdcpServer({ brandRights: {...} })now accepts a domain group for the three schema-backed tools:get_brand_identity,get_rights, andacquire_rights. No more manualserver.tool()registration, no bespoketaskToolResponsewrapping — context echo, account resolution, andbrandprotocol declaration inget_adcp_capabilitiesall work out of the box.update_rightsandcreative_approvalare intentionally not part of the domain group. The AdCP spec has no published JSON schemas for either —creative_approvalis modeled as a webhook (POST toapproval_webhookreturned fromacquire_rights), andupdate_rightsis only described in prose. Adding permissive passthrough schemas just to satisfy a storyboard would be building to the test. They will be added when upstream schemas land (tracked in https://github.com/adcontextprotocol/adcp).Request-builder honors
sample_requestforbuild_creativeandsync_creatives. Hand-authored sample payloads are preserved end-to-end, so storyboards can exercise slot-specific briefs, format-scoped uploads, and multi-format requests without the builder overwriting them. Matches the behavior already present forupdate_media_buy,create_media_buy,sync_plans, andcalibrate_content.Creative asset record shape. All storyboard
sample_request.creatives[].assetspayloads now match the generatedCreativeAssetSchema, which declaresassetsasz.record(asset_id, asset). Agents validating requests against the generated Zod schemas will no longer reject storyboard payloads that previously used the array-of-asset-objects form. Fixescreative_lifecycle,creative_template,creative_generative,creative_sales_agent,social_platform,media_buy_seller,media_buy_proposal_mode,media_buy_guaranteed_approval,deterministic_testing, andbrand_rights.Protocol gaps surfaced (tracked for upstream AdCP spec work):
update_rightsandcreative_approvallack published JSON schemas — the latter is spec'd as a webhook, so the gap is request/response schemas for either transporterror_compliancestoryboard is media-buy-scoped (requiresget_products) — needs capability-aware dispatch to cover creative, signals, brand-rights, and governance agents
Skill updates.
build-brand-rights-agent/SKILL.mdrewritten around the new domain group and against the actualschemas/cache/latest/brand/*.jsonshapes (namesas locale-keyed objects,logoswithorientation/background/variant,pricing_optionswithmodel/price/uses,acquire_rightsstatus discriminated union). Creative-approval flow is documented as an outbound webhook POST;update_rightsis documented as a regular HTTP endpoint until schemas land.
-
f44c8c9: Add context passthrough testing, format_id reconciliation, and identifier roundtrip validations across all storyboards. Client SDK now preserves context and ext through field stripping via ADCP_ENVELOPE_FIELDS. Runner merges context/ext from sample_request into request builder output.
-
8ad72f4: Added
createAdcpServer— declarative server builder with domain-grouped handlers, automatic account resolution, response builder wiring, tool annotations, and auto-generated capabilities. AddedcheckGovernanceandgovernanceDeniedErrorcomposable helpers for governance checks in financial handlers. -
ed52beb: Add
validation.filterInvalidProductsclient option to filter out invalid products from get_products responses instead of rejecting the entire response when some products fail schema validation -
337fbeb: Fix broken code examples in build-seller-agent skill and improve createAdcpServer DX. Skill fixes: tsc command, creative state transitions, simulateDelivery params, confirmed_at, storyboard table, capabilities casing, channels type inference. Framework fixes: make account optional in registered MCP input schemas for handler-level validation; accept Record<string, unknown> from DomainHandler return types so plain object literals compile without exact type matching. Add compile-time test for all skill file typescript examples.
-
8376f90: Add NetworkConsistencyChecker for validating managed publisher network deployments. Detects orphaned pointers, stale pointers, missing pointers, schema errors, and unreachable agent endpoints. Available as both a library import and CLI command (
adcp check-network). -
316565c: Add media buy response builders that eliminate common implementation traps: validActionsForStatus() maps status to valid actions, mediaBuyResponse() auto-defaults revision/confirmed_at/valid_actions, cancelMediaBuyResponse() requires cancellation metadata. Sync schemas from latest AdCP.
-
d99b118: Add composable scenario library for seller storyboard certification. Scenarios are small, focused behavior tests (governance outcomes, product refinement, proposal finalize) that specialization storyboards declare via
requires_scenarios. The compliance engine resolves and runs them alongside the main storyboard, enabling modular certification without duplicating test logic across seller types. -
5a3c835: Add storyboards, scenarios, and SDK helpers covering AdCP 3.0 primitives
- New
collection_governancestoryboard for collection list CRUD, webhook delivery, and targeting viaCollectionListReference - New
media_buy_seller/measurement_terms_rejectedscenario exercising theTERMS_REJECTEDround-trip: buyer proposes unworkable terms, seller rejects, buyer retries with seller-compatible terms - New
media_buy_seller/governance_denied_recoveryscenario verifying the buyer can correct a denied buy and retry within plan limits - New
media_buy_seller/pending_creatives_to_startscenario validating thepending_creatives → pending_starttransition aftersync_creatives - New
media_buy_seller/inventory_list_targetingscenario exercisingproperty_list+collection_listtargeting on bothcreate_media_buyANDupdate_media_buy(catches create/update parity regressions) and verifying persistence viaget_media_buys - New
media_buy_seller/inventory_list_no_matchscenario covering the case where referenced lists resolve to zero matching inventory — seller must return a zero-forecast product or an informative error, not crash - New
signal_marketplace/governance_deniedandbrand_rights/governance_deniedscenarios covering governance across signal activation and rights licensing purchase types - Extended
error_compliancewith aversion_negotiationphase that validatesVERSION_UNSUPPORTEDon an unsupportedadcp_major_versionand acceptance of a supported one - New
media_buy_seller/invalid_transitionsscenario with harderror_codeassertions forMEDIA_BUY_NOT_FOUND,PACKAGE_NOT_FOUND, andNOT_CANCELLABLE(state-machine hardening) - Hardened existing
error_complianceprobes (negative_budget,reversed_dates_error,nonexistent_product) from softfield_present: errorsto specificerror_codeassertions viaallowed_values check: error_codevalidations now acceptallowed_valuesin addition tovalue, so scenarios can assert one-of for semantically overlapping codes (e.g.VALIDATION_ERRORvsINVALID_REQUEST)- Wired new scenarios into parent storyboards via
requires_scenarios - Extended
fictional-entities.yamlwith acollectionssection (outdoor, automotive, and food programming) so storyboards have canonical test data forcollection_listtargeting - Extended
test-kits/acme-outdoor.yamlwith aninventory_targetssection providing matching and non-matchingPropertyListReference/CollectionListReferencefixtures - Added
resolvePropertyList/resolveCollectionList/matchesPropertyList/matchesCollectionListhelpers to@adcp/client/serverso seller handlers can filter inventory against buyer-supplied list references in one line
- New
-
7116ee7: Type brand_json with Zod schema matching the AdCP brand.json spec. SandboxBrand.brand_json is now typed as BrandJson instead of Record<string, unknown>, and sandbox data is validated at load time. Brand entries use spec-compliant field names (id, names) instead of the previous brand_id/name.
-
48c0501: Close schema pipeline gap: generate TypeScript types and Zod schemas for all missing JSON schemas, add TOOL_REQUEST_SCHEMAS and TOOL_RESPONSE_SCHEMAS exports
Patch Changes
-
1395e20: Add behavioral compliance validations to brand rights, property governance, and content standards storyboards
- Brand rights: verify resolved identity data (brand_id match, names present), reject invalid brand IDs, validate creative approval decisions, test expired campaign and nonexistent grant enforcement
- Property governance: assert compliant/non-compliant delivery verdicts, add enforcement phase with authorized and unauthorized publisher tests, fix context propagation for property_list_id
- Content standards: assert calibration verdict, add must-rule violation test, add policy version change test with re-calibration, strengthen delivery validation with summary and results checks
-
09a0c3e: Fix storyboard sample_requests and request-builder fallbacks to match AdCP schemas for brand_rights and property_governance
-
a8159c9: Enable
--protocol a2afor storyboard testing. Connection cleanup is now protocol-aware, A2A clients are cached to avoid re-fetching the agent card on every tool call, and the compliance-testing auto-augment log now goes to stderr so it doesn't corrupt--jsonoutput. -
5a3c835: Preserve
adcp_major_versionthrough per-tool field filtering and handle synchronous error responses from MCP Tasks servers. Version-negotiation probes (e.g. intentionally unsupported major versions) now reach sellers intact, andVERSION_UNSUPPORTEDerrors returned synchronously by MCP servers are surfaced to callers rather than being masked by a Tasks SDK validation error.