v5.4.0
Minor Changes
-
e6abfdd: Ship five downstream-ergonomics fixes surfaced while porting a training agent onto 5.3. One public-type change (breaking for pre-release consumers only — the type never reached a stable release), four additive.
BREAKING (pre-release only) —
createAdcpServer()returnsAdcpServerinstead of SDKMcpServer. Re-exporting the SDK'sMcpServertype forced consumers through a specific module resolution path. A TypeScript ESM consumer importing@adcp/client(CJS) and separately importing@modelcontextprotocol/sdk(ESM) got two structurally-identical but distinctMcpServertypes — the SDK's private_serverInfofield breaks assignment compatibility between them. Owning the type on our side eliminates the hazard for every consumer.AdcpServerexposesconnect,close, and the newdispatchTestRequest. Tool registration continues to flow throughcreateAdcpServer's domain-grouped handler config. For seller extensions outsideAdcpToolMap, pass acustomToolsmap in the same config — nogetSdkServer()escape hatch required.serve()accepts bothAdcpServerand rawMcpServer(forcreateTaskCapableServerusers). Seedocs/migration-5.3-to-5.4.mdfor the verbatim diffs.AdcpServer.dispatchTestRequest({ method, params })— encapsulated test-only dispatch so downstream harnesses stop writing(server as any)._requestHandlers.get(...). The'tools/call'overload returns a typedCallToolResult; the generic fallback returnsunknown.McpToolResponse.structuredContentis now optional. Error responses no longer need to fabricate an emptystructuredContentto satisfy the type. All built-in success builders still populate it.SingleAgentClient.validateRequestdropsschema.strict(). The storyboard runner'sapplyBrandInvariantinjects top-levelbrand/accountonto every outgoing request for run-scoped tenancy. Tools whose schema declares neither (list_creative_formats,get_signals,activate_signal,sync_creatives) had strict() rejecting the injection client-side BEFOREadaptRequestForServerVersioncould strip by schema. Non-strict parse lets the injection flow to the adapter. Required-field and shape violations still reject. Typo detection on unknown top-level keys now happens server-side.Storyboard runner
request_signing.transport: 'raw' | 'mcp'. Plumbs the existing grader option through the storyboard runner so MCP-only agents can pass thesigned-requestsspecialism's vectors — each vector body is wrapped in a JSON-RPCtools/callenvelope and posted to the/mcpmount instead of per-operation HTTP endpoints. Matches theadcp grade request-signing --transport mcpCLI flag.