Skip to content

feat(decisioning): expose adcp_version for DecisioningPlatform servers #1045

Description

@bokelley

Summary

SDK 8 adds version-scoped MCP schemas and dispatch, but the public DecisioningPlatform composition path does not expose a way to set the handler's protocol pin.

Both of these public functions lack an adcp_version parameter:

  • adcp.decisioning.serve.create_adcp_server_from_platform()
  • adcp.decisioning.serve()

The factory always constructs PlatformHandler(...) without a pin, and PlatformHandler does not implement get_adcp_version(). As a result, adcp.server.mcp_tools._resolve_handler_adcp_version(handler, None) returns None.

That makes a DecisioningPlatform-based seller fall back to the SDK's unversioned/current 3.2 model schemas for MCP discovery even when the seller advertises and enforces AdCP 3.1. For example, beta.4's unversioned ListCreativesRequest advertises the 3.2-only assignment_projection and assignment_limit fields; the bundled 3.1 schema correctly omits them.

Current workaround

An adopter must either bypass adcp.decisioning.serve() or mutate the generated handler's private state:

handler, executor, registry = create_adcp_server_from_platform(platform)
handler._adcp_version = "3.1"

Once set, the existing server resolver correctly selects the bundled 3.1 discovery schemas and uses 3.1 as the default unnegotiated dispatch version.

Suggested API

Add adcp_version: str | None = None to both DecisioningPlatform composition functions, resolve/validate it consistently with the other SDK constructor surfaces, and attach the resolved pin to PlatformHandler.

A regression test could assert that a platform created with adcp_version="3.1":

  1. resolves to "3.1" through _resolve_handler_adcp_version;
  2. advertises the bundled 3.1 MCP request/output schemas; and
  3. uses 3.1 for unversioned dispatch.

Environment

  • adcp==8.0.0b4
  • Python 3.13
  • multi-tenant seller using LazyPlatformRouter + adcp.decisioning.serve()

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions