The compliance job nobody assigns to the registry
Two of the largest cloud providers — AWS (AgentCore Runtime) and Microsoft (Azure AI Foundry Agent Service) — have made A2A (Agent2Agent) protocol support generally available. Both hold seats on the A2A Technical Steering Committee. Both are in production in enterprises around the world. And the vast majority of teams building on top of their registries are quietly making the same mistake: treating the registry as a catalog rather than a compliance enforcement layer. There is, as of now, no clear framework for choosing a compliance enforcement layer that does the job.
This article is the practical evaluation guide. It covers what a registry has to validate to be more than a CRUD catalog, where the platform-native registries from AWS and Azure fall short today, and the features to look for whether you are evaluating off-the-shelf or building your own.
For purposes of clarity: the registry is the catalog plane. It holds what agents exist, their declared capabilities, owners, and policies. The gateway is the data plane. It enforces those policies at invocation time. The two are not interchangeable; the full treatment of that split lives in Agent Registry vs. Agent Gateway: Two Roles, One Control Plane. This article is exclusively about the registry's job, and the compliance validation almost no registry does today.
The A2A protocol reached 1.0 under the Linux Foundation in March 2026. The TSC includes AWS, Cisco, Google, IBM, Microsoft, Salesforce, SAP, and ServiceNow — the enterprise-software industry establishing a common standard for inter-agent communication. The 1.0 spec is transport-neutral but highly opinionated about the contract every agent has to satisfy: a well-formed AgentCard, a documented authentication scheme, and a discoverable URL where callers can find it. The registry is the mechanism for enforcing that contract at registration time.
The problem: both AWS and Microsoft currently ship A2A at v0.3 only — the pre-1.0 version. The spec has moved. The platforms have not caught up. And most registries have no mechanism to track which version of the spec each registered agent operates under, let alone validate whether its declared capabilities are actually compliant.
Gap #1 — the transport trap
A2A v0.3 defined three transport options — JSON-RPC 2.0, HTTP+JSON, and gRPC — declared optionally via preferredTransport and additionalInterfaces[] on the AgentCard. A2A v1.0 consolidated these into a single ordered supportedInterfaces[] array, where the first interface is preferred and each entry carries url, protocolBinding, and protocolVersion. The schema changed. The enum values changed (breaking: jsonrpc became JSONRPC). A client that does not negotiate versions before sending a request will silently send a v1.0 payload to a v0.3 server, get a response, and fail to parse it.
| Feature | A2A v0.3 | A2A v1.0 | AWS AgentCore | Azure AI Foundry |
|---|---|---|---|---|
| Protocol version supported | v0.3 | v1.0 | v0.3 | v0.3 only |
| JSON-RPC transport | Optional | Supported | ✔ (only transport) | ✔ |
| HTTP+JSON transport | Optional | Supported | ❌ | ✔ |
| gRPC transport | Optional | Supported | ❌ | ❌ |
| Transport declaration | preferredTransport + additionalInterfaces[] | supportedInterfaces[] (ordered) | Implicit (JSON-RPC only) | v0.3 format |
AWS AgentCore Runtime deliberately chooses JSON-RPC 2.0 over HTTP as the single transport for inter-agent communication. The official AgentCore A2A protocol contract documents JSON-RPC 2.0 over HTTP exclusively; HTTP+JSON and gRPC are not implemented. Each AgentCore agent publishes a root POST endpoint plus a .well-known/agent-card.json discovery endpoint.
Azure AI Foundry Agent Service publishes an explicit transport-support table listing HTTP+JSON and JSON-RPC. gRPC is not supported — but that is an infrastructure constraint of standard enterprise web stacks (ALB, API Gateway, even uvicorn over HTTP/1.1), not a Foundry-specific choice. The A2A protocol version is stated explicitly: "0.3 only."
Neither platform is wrong — both are perfectly rational engineering choices. The problem is that a registry which stores an AgentCard claiming gRPC support without verifying it against the runtime produces a misconfigured catalog entry that fails on first invocation. And a registry that doesn't track A2A spec version per agent cannot safely route a v1.0 caller to a v0.3 agent — and no translation layer exists. The registry is the unique part of the system that sees all agents, which makes it the right place to enforce transport-declaration accuracy and flag version mismatches before they reach production.
Gap #2 — out-of-band M2M auth
The A2A specification describes the OAuth 2.0 Client Credentials flow for machine-to-machine scenarios, which in principle is supported through RFC 7591 Dynamic Client Registration. In practice, DCR support varies widely across IdPs, and neither major cloud platform uses DCR as an automated registration mechanism.
AWS AgentCore requires each runtime to be pre-configured with a customJWTAuthorizer pointing at your IdP's discovery URL. Every new AgentCore agent therefore requires infrastructure-team and identity-team coordination before its first M2M call.
Azure AI Foundry requires the calling agent's identity (managed identity, service principal, or agent identity) to be pre-granted the Azure AI User role on the target Foundry project. That RBAC role assignment is a manual operation in Azure RBAC. There is no support for dynamic registration of calling agents or for automated provisioning of OAuth 2.0 clients.
There is also a significant spec gap on top of these platform constraints: the A2A AgentCard has no field declaring client role (M2M vs user-delegated). A registry that receives an AgentCard cannot tell from the card alone whether the agent is intended for M2M invocation, user-delegated access, or both — that has to be tracked out of band.
The registry should own the auth-registration mappings for every agent: which IdP pre-config applies, which auth patterns are supported, which credentials have been coordinated. Without that, onboarding a new agent is a manual checklist with no enforcement.
Gap #3 — AgentCard compliance nobody validates
The AgentCard is how an agent describes itself to other agents under A2A. A spec-compliant card lives at /.well-known/agent-card.json, contains a fixed set of required fields, and is publicly accessible without prior authentication. A2A v1.0 added an optional signatures[] field for JWS-based card authenticity (RFC 7515 + RFC 8785).
Here is how the two platforms diverge.
| Feature | A2A spec | AWS AgentCore | Azure AI Foundry |
|---|---|---|---|
| AgentCard path | /.well-known/agent-card.json | ✔ Standard path | agentCard/v0.3 — non-standard |
| AgentCard access | Public, unauthenticated | No auth required | Microsoft Entra auth required |
| Standard A2A SDK discovery | Auto-discover | ✔ Works | ❌ Fails without manual token + custom path |
| A2A v1.0 signatures[] | Optional | Not implemented | Not implemented |
AWS AgentCore gets the discovery path right. The card at /.well-known/agent-card.json is unauthenticated, so standard A2A clients discover AgentCore agents out of the box.
Azure AI Foundry breaks both assumptions. The card lives at agentCard/v0.3 from the A2A base URL rather than the well-known root, and Foundry documentation states explicitly: "Both URLs require Microsoft Entra ID authentication. Anonymous access to the agent card isn't supported." A normal A2A client would read /.well-known/agent-card.json without credentials to learn how to authenticate. Foundry inverts this: the client must already have an Entra token with Azure AI User role for the project before retrieving the card. A standard A2A client has no way to know this in advance.
Microsoft's own documentation for calling a Foundry agent from the Python A2A SDK walks through manually configuring the httpx client with a Bearer token before creating the card resolver, then passing the custom agentCard/v0.3 path. Even Foundry-to-Foundry calls require a project connection created via REST API with the custom path in connection metadata — the Foundry portal does not yet support it.
This is not a Foundry bug. It is a deliberate security design choice that protects card metadata behind Entra authentication. The consequence is that any agent ecosystem including Foundry agents will fail standard A2A discovery unless the registry stores the non-standard path and auth prerequisites for each Foundry agent and conveys them to the caller before discovery is attempted.
The registry is the right place for this — it stores what the spec cannot assume about a particular deployment and makes it queryable. Custom card paths, auth prerequisites, transport restrictions, A2A spec version per deployment — all of it. Without that, every caller writes custom code for every possible target, which is operationally indistinguishable from having no standard at all.
Five non-negotiable requirements
Here is a concrete framework to apply when comparing, evaluating, or building an agent registry. Five questions are enough to separate a registry from a catalog with a better name.
- 01
Does it validate AgentCard schema at registration?
Required fields must be non-null and well-formed; transport declarations must parse; A2A version must be tagged. A partially filled AgentCard is a misconfigured agent, not a registered agent.
- 02
Does it check transport claims against runtime constraints?
An agent that claims gRPC support but runs on an ALB-backed HTTP/1.1 stack should be flagged as impossible at registration. The registry sees the runtime and the claim — it can catch the mismatch.
- 03
Is A2A spec version per agent tracked, and version mismatches detected?
Your current ecosystem runs v0.3. The moment v1.0 agents land alongside v0.3 agents, every caller needs to know which version it is talking to. The registry is the only entity with that information.
- 04
Does it handle custom discovery paths and auth prerequisites?
Standard A2A assumes /.well-known/agent-card.json. Reality (Foundry) does not. The registry has to store arbitrary discovery paths, auth-required card paths, and per-agent auth patterns, and make them available to callers before discovery is attempted.
- 05
Does it propagate to the gateway?
Registry data without gateway enforcement is documentation. Transport constraints, auth requirements, version metadata — all of it has to flow from the registry to the gateway so invocation policy derives from the same source of truth the registration produced.
If the answer to any of these is "no" or "not yet," you are running a catalog with a better name. The list also works as a scorecard for evaluating platform-native registries, open-source projects, and vendors — and as a requirements baseline if you decide to build one internally.
How Jarvis Registry implements this
The issues described here are the ones that prompted us at ASCENDING Inc. to build Jarvis Registry as the central component of the Jarvis AI platform. The registry is open source.
Jarvis Registry is designed for the multi-cloud, multi-runtime world that native platform registries were not built for. The AWS Agent Registry is scoped to AgentCore and its related ecosystem. The Azure AI Foundry Agent Service publishes individual ARM resources per agent without a central catalog or cross-project A2A compliance validation. Neither provides a searchable, validated catalog of agents across boundaries. Jarvis Registry does — it validates AgentCard compliance at registration, tracks the metadata the spec cannot assume, and populates the Jarvis MCP Gateway with the enforcement context every invocation decision needs.
Common questions
-
Why isn't the AgentCard catalog enough — what does a registry add?
Storing an AgentCard is necessary but not sufficient. A registry has to validate the card's schema at registration, check transport claims against the runtime, track A2A spec version per agent, store custom discovery paths and auth prerequisites the spec cannot assume, and propagate all of this to the gateway. A registry that just stores what an agent declares is a directory with a better name. -
Does AWS AgentCore or Azure AI Foundry support A2A v1.0?
No. Both ship v0.3 only as of May 2026. AWS and Microsoft are A2A TSC members, but their platform implementations have not caught up to the v1.0 spec that landed in March 2026. A v1.0 caller routed to a v0.3 agent will silently fail at the schema layer — supportedInterfaces[] vs preferredTransport + additionalInterfaces[], and the JSON-RPC enum casing changed. -
Why does Foundry's AgentCard require Entra authentication?
It is a deliberate Microsoft security design choice — Foundry protects card metadata behind Entra authentication and uses a non-standard path (agentCard/v0.3) rather than the A2A well-known location. Standard A2A SDK discovery fails. The registry must store these non-standard paths and auth prerequisites and convey them to callers before discovery is attempted. -
How is this different from Agent Registry vs. Agent Gateway?
That earlier piece draws the line between the two planes — registry = catalog, gateway = enforcement at invocation. This article is exclusively about what the registry needs to do: schema validation, transport-vs-runtime checks, A2A version tracking, custom discovery handling, and gateway propagation. The split article is the foundation; this one is the registry's job description.