Skip to content

Implement A2A extension activation via A2A-Extensions header #2061

@tomkis

Description

@tomkis

Is your feature request related to a problem? Please describe.
The A2A spec requires extensions to be activated per-request via the A2A-Extensions HTTP header (spec). Extensions should default to inactive. Currently neither the server nor the client implements this.

Server (agentstack-sdk-py):

  • Extension dependencies are always injected regardless of client activation
  • Outgoing message metadata (citations, trajectories, etc.) is never filtered based on activated extensions
  • No A2A-Extensions response header is set

Client (agentstack-sdk-ts / agentstack-ui):

  • handleAgentCard reads agent card extensions to resolve service demands (LLM, MCP, etc.) via message metadata, but never sends A2A-Extensions header
  • UI extensions (citation, trajectory, error, canvas) are parsed from response metadata unconditionally — client never declares which UI extensions it actually supports
  • sendMessageStream call has no mechanism to attach the activation header

Describe the solution you'd like

  • Client should send A2A-Extensions header listing URIs of extensions it supports
  • Server should read the header and only include metadata for activated extensions in responses
  • Server should set A2A-Extensions response header confirming activated extensions
  • BaseExtensionServer should expose activation state so agent code can branch on it

Additional context
May require upstream changes in a2a-sdk (Python) and @a2a-js/sdk if request/response contexts don't carry header info today.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status
    In dev

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions