Skip to content

Implement A2A extension activation via A2A-Extensions header #2061

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

    Labels

    breaking-changeenhancementNew feature or requeststaleIssue has not had recent activity or appears to be solved. Stale issues will be automatically closed

    Type

    No type

    Projects

    Status
    In dev

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions