Skip to content

Releases: adcontextprotocol/adcp-client

v3.11.1

03 Feb 15:11
25162d9

Choose a tag to compare

Patch Changes

  • 6ec7e3e: Extract shared is401Error helper for centralized 401 authentication error detection

v3.11.0

02 Feb 18:29
17d0d3c

Choose a tag to compare

Minor Changes

  • cdcf3a7: Add @adcp/client/auth export path for OAuth and authentication utilities

v3.10.0

02 Feb 17:52
db4de66

Choose a tag to compare

Minor Changes

  • d7f6ce7: Add OAuth discovery utilities for checking if MCP servers support OAuth authentication.

    New exports:

    • discoverOAuthMetadata(agentUrl) - Fetches OAuth Authorization Server Metadata from /.well-known/oauth-authorization-server
    • supportsOAuth(agentUrl) - Simple boolean check if server supports OAuth
    • supportsDynamicRegistration(agentUrl) - Check if server supports dynamic client registration
    • OAuthMetadata type - RFC 8414 Authorization Server Metadata structure
    • DiscoveryOptions type - Options for discovery requests (timeout, custom fetch)

Patch Changes

  • d7f6ce7: Export Account domain types from main entry point

    • Account - billing account interface
    • ListAccountsRequest - request params for listing accounts
    • ListAccountsResponse - response payload with accounts array

    The types existed in tools.generated.ts but weren't explicitly exported from @adcp/client.

v3.9.0

02 Feb 16:58
2e420c0

Choose a tag to compare

Minor Changes

  • 1e919b7: ### Breaking Changes

    TaskExecutor behavior changes for async statuses:

    • working status: Now returns immediately as a successful result (success: true, status: 'working') instead of polling until completion or timeout. Callers should use the returned taskId to poll for completion or set up webhooks.
    • input-required status: Now returns as a successful paused state (success: true, status: 'input-required') instead of throwing InputRequiredError when no handler is provided. Access the input request via result.metadata.inputRequest.

    Migration:

    // Before: catching InputRequiredError
    try {
      const result = await executor.executeTask(agent, task, params);
    } catch (error) {
      if (error instanceof InputRequiredError) {
        // Handle input request
      }
    }
    
    // After: checking result status
    const result = await executor.executeTask(agent, task, params);
    if (result.status === 'input-required') {
      const { question, field } = result.metadata.inputRequest;
      // Handle input request
    }

    Conversation context changes:

    • wasFieldDiscussed(field): Now returns true only if the agent explicitly requested that field via an input-required response (previously checked if any message contained the field).
    • getPreviousResponse(field): Now returns the user's response to a specific field request (previously returned any message content containing the field).

    New Features

    • Added v3 protocol testing scenarios:
      • capability_discovery - Test get_adcp_capabilities and verify v3 protocol support
      • governance_property_lists - Test property list CRUD operations
      • governance_content_standards - Test content standards listing and calibration
      • si_session_lifecycle - Test full SI session: initiate → messages → terminate
      • si_availability - Quick check for SI offering availability
    • Exported ProtocolClient and related functions from main library for testing purposes
  • 38ba6a6: Add OAuth support for MCP servers

    • New OAuth module in src/lib/auth/oauth/ with pluggable flow handlers
    • MCPOAuthProvider implements MCP SDK's OAuthClientProvider interface
    • CLIFlowHandler for browser-based OAuth with local callback server
    • OAuth tokens stored directly in AgentConfig alongside static auth tokens
    • CLI flags: --oauth for OAuth auth, --clear-oauth to clear tokens
    • --save-auth <alias> <url> --oauth to save agents with OAuth
    • Auto-detection of OAuth requirement when MCP servers return UnauthorizedError
    • Helper functions: hasValidOAuthTokens, clearOAuthTokens, getEffectiveAuthToken
    • Security fix: use spawn instead of exec for browser open to prevent command injection

v3.8.1

26 Jan 21:14
97eb9b2

Choose a tag to compare

Patch Changes

  • 7365296: Fix schema validation for v2 pricing options in get_products responses

    When servers return v2-style pricing options (rate, is_fixed, price_guidance.floor), schema validation now normalizes them to v3 format (fixed_price, floor_price) before validation. This ensures v2 server responses pass validation against v3 schemas.

v3.8.0

26 Jan 19:23
f3d1160

Choose a tag to compare

Minor Changes

  • d3869a1: Add ADCP v3.0 compatibility while preserving v2.5/v2.6 backward compatibility

    New Features:

    • Capability detection via get_adcp_capabilities tool or synthetic detection from tool list
    • v3 request/response adaptation for pricing fields (fixed_price, floor_price)
    • Authoritative location redirect handling with loop detection and HTTPS validation
    • Server-side adapter interfaces (ContentStandardsAdapter, PropertyListAdapter, ProposalManager, SISessionManager)
    • New domains: governance, sponsored-intelligence, protocol

    Adapters:

    • Pricing adapter: normalizes v2 (rate, is_fixed) to v3 (fixed_price, floor_price)
    • Creative adapter: handles v2/v3 creative assignment field differences
    • Format renders adapter: normalizes format render structures
    • Preview normalizer: handles v2/v3 preview response differences

    Breaking Change Handling:

    • All v2 responses automatically normalized to v3 API
    • Clients always see v3 field names regardless of server version
    • v2 servers receive adapted requests with v2 field names

Patch Changes

  • d3869a1: Fix multi-agent partial failure handling using Promise.allSettled

v3.7.1

14 Jan 16:59
a3c5dd6

Choose a tag to compare

Patch Changes

  • 3a60592: Fix JavaScript syntax error in testing UI and update hono for security
    • UI Fix: Resolved syntax error in index.html dimension parsing logic that caused toggleAddAgent and other functions to be undefined. The invalid } else { } else if { structure was corrected to proper nested conditionals.
    • Security: Updated hono from 4.11.3 to 4.11.4 to fix high-severity JWT algorithm confusion vulnerabilities (GHSA-3vhc-576x-3qv4, GHSA-f67f-6cw9-8mq4).

v3.7.0

08 Jan 18:20
91e48e0

Choose a tag to compare

Minor Changes

  • 302089a: Add AdCP v2.6 support with backward compatibility for Format schema changes
    • New assets field in Format schema (replaces deprecated assets_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

v3.6.0

07 Jan 18:05
3efe672

Choose a tag to compare

Minor Changes

  • 2749985: Add test subcommand to CLI for running agent test scenarios

    New 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

04 Jan 20:08
1617c64

Choose a tag to compare

Patch Changes

  • fb041b6: Fix validation error when agents return empty publisher_domains array

    The JSON Schema defines minItems: 1 for 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 minItems constraints 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.