v0.8.2 — A2A gateway fixes
🚀 Get started
New to AISIX? Get the gateway running and route your first LLM request in minutes:
- 📖 Documentation — https://docs.api7.ai/ai-gateway/
- ⚡ Gateway quickstart (one container, declarative
resources.yaml) — https://docs.api7.ai/ai-gateway/getting-started/gateway-quickstart
📦 Download
Pull the container image from the GitHub Container Registry:
docker pull ghcr.io/api7/aisix:0.8.2Rolling tags (0.8, latest) and the docker.io/api7/aisix mirror for private/offline deployments are listed on the package page.
A maintenance release for the A2A gateway. The endpoint shipped with the pieces
around it in place — caller authentication, per-agent access control, traffic
controls, telemetry — but three faults on the upstream-facing side meant a
registered agent could not always be reached, and the two methods used to watch
a long-running task could not be used at all. All three are fixed here.
🧩 A2A gateway
- The gateway announces the agent's pinned wire version in the
A2A-Versionheader on every call it makes to that agent, including the agent-card fetch (#914). Nothing sent the header before, and the A2A specification tells an agent to read its absence as version 0.3 — so an agent pinned to1.0answeredVersionNotSupportedError, and the registeredprotocol_versionhad no effect. A version supplied by the caller does not override the registered pin. - An agent whose card is published under a path prefix now resolves (#914). The well-known card URI was built at the origin, discarding the path the agent was registered with, so an agent behind an ingress path — or on a platform that gives each tenant a prefix — was asked for a card it does not serve there, and the platform's catch-all
405came back as the agent's own answer. - The card the gateway serves points every advertised address back at the gateway: the top-level
urland each entry undersupportedInterfacesandadditionalInterfaces(#914). Only the top level was rewritten before, and a1.0caller reads its endpoint out ofsupportedInterfaces— so it could reach the upstream agent directly, bypassing caller authentication and per-agent access control. message/streamandtasks/resubscriberelay the agent's event stream as it arrives (#916). Both were served through the single-response path, which buffered the whole body and parsed it as one JSON document; an event stream is not valid JSON, so both methods failed with502. Events are reassembled across chunk boundaries, and a malformed event ends the stream with an error rather than being skipped, so a truncated task cannot read as a completed one.
🔌 Configuration
- The A2A agent and MCP server rules — the name shape, the credential each
auth_typerequires, and the fields an OpenAPI-backed MCP server needs — are enforced on every configuration path, not only this gateway's Admin API (#848). A definition that breaks one of them is reported with the entry and the missing property named.
⚠️ Behavior change
A resources file carrying an A2A agent or MCP server definition that breaks one
of those rules no longer loads, so a gateway configured that way stops at
startup with the offending entry named instead of running with a definition
that cannot work — an agent named with a / splits its own /a2a/<name> route
in two, and auth_type: bearer with no secret authenticates upstream with
nothing.
What to check before upgrading, per entry:
| Entry | Requirement |
|---|---|
a2a_agents[].name, mcp_servers[].name |
a single URL-safe path segment; no __ in an MCP server name |
auth_type: bearer / api_key |
secret present and non-empty |
auth_type: oauth2 (MCP) |
secret, client_id and token_url present |
type: openapi (MCP) |
spec present |
Validate a file before rolling it out:
aisix validate --resources /etc/aisix/resources.yamlA gateway managed by AISIX Cloud is unaffected: those rules already applied when
the resource was created, and such a gateway rejects only the offending entry
and keeps serving the rest.
Full Changelog: v0.8.1...v0.8.2