A2A (proto)

This extension has the qualified name envoy.filters.http.a2a

Note

This extension is functional but has not had substantial production burn time, use only with this caveat.

This extension has an unknown security posture and should only be used in deployments where both the downstream and upstream are trusted.

Tip

This extension extends and can be used with the following extension category:

This extension must be configured with one of the following type URLs:

Warning

This API feature is currently work-in-progress. API features marked as work-in-progress are not considered stable, are not covered by the threat model, are not supported by the security team, and are subject to breaking changes. Do not use this feature without understanding each of the previous points.

A2A filter configuration overview.

extensions.filters.http.a2a.v3.A2a

[extensions.filters.http.a2a.v3.A2a proto]

This filter will inspect and get attributes from A2A traffic.

{
  "traffic_mode": ...,
  "max_request_body_size": {...},
  "parser_config": {...},
  "storage_mode": ...
}
traffic_mode

(extensions.filters.http.a2a.v3.A2a.TrafficMode) Configures how the filter handles non-A2A traffic.

max_request_body_size

(UInt32Value) Maximum size of the request body to buffer for JSON-RPC validation. If the request body exceeds this size, the request is rejected with 413 Payload Too Large. This limit applies to both REJECT and PASS_THROUGH modes to prevent unbounded buffering.

It defaults to 8KB (8192 bytes) and the maximum allowed value is 10MB (10485760 bytes).

Setting it to 0 would disable the limit. It is not recommended to do so in production.

parser_config

(extensions.filters.http.a2a.v3.ParserConfig) Customized configuration for A2A parser.

storage_mode

(extensions.filters.http.a2a.v3.A2a.StorageMode) Where to store parsed A2A message attributes. Controls whether attributes are written to dynamic metadata, filter state, or both. Default is no storage.

Enum extensions.filters.http.a2a.v3.A2a.TrafficMode

[extensions.filters.http.a2a.v3.A2a.TrafficMode proto]

Traffic handling mode for non-A2A traffic.

PASS_THROUGH

(DEFAULT) ⁣Proxies the HTTP request and response without A2A spec check.

REJECT

⁣Reject requests that are not following A2A spec.

Enum extensions.filters.http.a2a.v3.A2a.StorageMode

[extensions.filters.http.a2a.v3.A2a.StorageMode proto]

Where to store parsed A2A message attributes.

NONE

(DEFAULT) ⁣Default behavior: no storage.

DYNAMIC_METADATA

⁣Store message attributes in dynamic metadata only.

FILTER_STATE

⁣Store message attributes in filter state only.

DYNAMIC_METADATA_AND_FILTER_STATE

⁣Store message attributes in both dynamic metadata and filter state.

extensions.filters.http.a2a.v3.MethodParsingConfig

[extensions.filters.http.a2a.v3.MethodParsingConfig proto]

{
  "group": ...,
  "paths": []
}
group

(string) The group/category name to assign to this method (e.g., “tasks”, “message”). If provided, this overrides any built-in classification for the method. This will be emitted to dynamic metadata under the key specified by group_metadata_key.

paths

(repeated string) List of attributes to extract for this method, specified by their JSON paths (e.g., “params.name”).

extensions.filters.http.a2a.v3.ParserConfig

[extensions.filters.http.a2a.v3.ParserConfig proto]

{
  "method_configs": {...},
  "always_extract_attributes": [],
  "group_metadata_key": ...
}
method_configs

(repeated map<string, extensions.filters.http.a2a.v3.MethodParsingConfig>) Method-specific overrides for grouping and attribute extraction. If a method is not specified in method_configs, or if ‘group’ is empty in its config, its group will be determined by built-in classification based on method prefix (e.g., “message” for “message/send”) and default extraction rules will be applied for that method.

always_extract_attributes

(repeated string) Attributes that should always be extracted regardless of the method. Specified by their JSON paths (e.g., “params.id”).

group_metadata_key

(string) The dynamic metadata key under which the method’s group name will be stored (e.g., “a2a_group”). If this key is empty, group information will not be added to dynamic metadata.