Releases: adcontextprotocol/adcp-client
v3.7.0
Minor Changes
- 302089a: Add AdCP v2.6 support with backward compatibility for Format schema changes
- New
assetsfield in Format schema (replaces deprecatedassets_required) - Added format-assets utilities:
getFormatAssets(),getRequiredAssets(),getOptionalAssets(), etc. - Updated testing framework to use new utilities
- Added URL input option for image/video assets in testing UI
- Added 21 unit tests for format-assets utilities
- New
v3.6.0
Minor Changes
-
2749985: Add
testsubcommand to CLI for running agent test scenariosNew CLI command enables testing AdCP agents directly from the command line:
# List available test scenarios npx @adcp/client test --list-scenarios # Run discovery tests against the built-in test agent npx @adcp/client test test # Run a specific scenario npx @adcp/client test test full_sales_flow # Test your own agent npx @adcp/client test https://my-agent.com discovery --auth $TOKEN # JSON output for CI pipelines npx @adcp/client test test discovery --json
Available scenarios include: health_check, discovery, create_media_buy, full_sales_flow,
error_handling, validation, pricing_edge_cases, and more.The command exits with code 0 on success, 3 on test failure, making it suitable for CI pipelines.
v3.5.2
Patch Changes
-
fb041b6: Fix validation error when agents return empty publisher_domains array
The JSON Schema defines
minItems: 1for publisher_domains, which caused validation to fail when agents returned empty arrays. This is a common scenario when an agent isn't authorized for any publishers yet.The fix relaxes the generated TypeScript types and Zod schemas to accept empty arrays by:
- Removing
minItemsconstraints during TypeScript type generation - Converting tuple patterns (
z.tuple([]).rest()) to arrays (z.array()) in Zod schema generation
This change improves interoperability with real-world agents that may return empty arrays for optional array fields.
- Removing
v3.5.1
v3.5.0
Minor Changes
-
6d5d050: Add comprehensive E2E agent testing framework with support for discovery, media buy creation, creative sync, and behavioral analysis scenarios.
-
9b34827: Simplify authentication configuration by removing
requiresAuthandauth_token_envfields.Breaking Changes:
AgentConfig.requiresAuthhas been removed - ifauth_tokenis provided, it will be usedAgentConfig.auth_token_envhas been removed - useauth_tokendirectly with the token value
Migration:
// Before const config = { id: 'my-agent', agent_uri: 'https://agent.example.com', protocol: 'mcp', requiresAuth: true, auth_token_env: 'MY_TOKEN_ENV_VAR', // or auth_token: 'direct-token' }; // After const config = { id: 'my-agent', agent_uri: 'https://agent.example.com', protocol: 'mcp', auth_token: process.env.MY_TOKEN_ENV_VAR, // or 'direct-token' };
The simplified model: if
auth_tokenis provided, it's sent with requests. If not provided, no authentication is sent.
Patch Changes
- e602659: Regenerate TypeScript types to match AdCP v2.5.1 schemas
v3.4.0
Minor Changes
- 0494341: Updates webhook handler to better support mcp and a2a payloads. Adds typed payloads; Makes reporting webhook configurable;
Patch Changes
-
a639f2c: Fix skipping .data generation when status is submitted
-
b1ad29d: feat: URL canonicalization and agent comparison
Auto-detect A2A protocol for .well-known/agent-card.json URLs
When users provide a
.well-known/agent-card.jsonURL (e.g.,https://example.com/.well-known/agent-card.json), the library now correctly detects this as an A2A agent card discovery URL and switches to the A2A protocol.Canonical URL resolution
Added methods to resolve and compare agents by their canonical base URL:
getCanonicalUrl()- Synchronously returns the canonical base URL (computed from configured URL)resolveCanonicalUrl()- Async method that fetches the agent card (A2A) or discovers endpoint (MCP) to get the authoritative canonical URLisSameAgent(other)- Compare two agents by canonical URLisSameAgentResolved(other)- Async comparison that resolves canonical URLs firstgetResolvedAgent()- Get agent config with canonical URL resolved
Canonical URL computation:
- For A2A: Uses the
urlfield from the agent card, or strips/.well-known/agent-card.json - For MCP: Strips
/mcpor/mcp/suffix from discovered endpoint
This enables comparing agents regardless of how they were configured:
// These all resolve to the same canonical URL: https://example.com agent1.agent_uri = 'https://example.com'; agent2.agent_uri = 'https://example.com/mcp'; agent3.agent_uri = 'https://example.com/.well-known/agent-card.json'; client.agent('agent1').isSameAgent(client.agent('agent2')); // true
Fixes #175
v3.3.3
Patch Changes
-
fbc29ae: Fix CLI --auth flag to use literal token values directly
The CLI was incorrectly setting
auth_token_env(environment variable name) instead ofauth_token(direct value) when the user provided--auth TOKEN. This caused authentication to fail with "Environment variable not found" warnings because the auth module tried to look up the literal token as an environment variable name. -
53d7cec: Remove spurious index signature types from generated validation schemas
The
json-schema-to-typescriptlibrary was incorrectly generating index signature types (e.g.,{ [k: string]: unknown }) for schemas withoneOfandadditionalProperties: false. This caused validation to allow arbitrary extra fields on requests likeupdate_media_buyandprovide_performance_feedback.Changes:
- Added
removeIndexSignatureTypes()function to post-process generated types - Added
update_media_buyandlist_creativesschemas to the validation map - Added tests for request validation with extra fields
- Added
v3.3.2
v3.3.1
v3.3.0
Minor Changes
-
a322f4c: fix: treat working/input-required as valid intermediate states and extract A2A webhook payloads
workingstatus now returns immediately withstatus: 'working'instead of polling and timing outinput-requiredstatus returns valid result instead of throwingInputRequiredErrorwhen no handler provided- Made
success=trueconsistent for all intermediate states (working, submitted, input-required, deferred) - Added
taskTypeparameter tohandleWebhookfor all client classes (SingleAgentClient, AgentClient, ADCPMultiAgentClient) handleWebhooknow extracts ADCP response from raw A2A task payloads (artifacts[0].parts[].data where kind === 'data')- Handlers now receive unwrapped ADCP responses instead of raw A2A protocol structure