· · 2 minutes read

A2A v1 Is Here: Cross-Platform Agent Communication in Microsoft Agent Framework for .NET

The A2A Protocol v1.0 has shipped and the Microsoft Agent Framework .NET packages are updated to match — stable interoperability for connecting and exposing AI agents across providers.

.NET Agent Framework A2A Interoperability
This post is also available in:Català, Español, Deutsch, Français, Português, Italiano, 日本語, 中文, 한국어, Русский, हिन्दी, Polski, Türkçe, العربية, Bahasa Indonesia, Nederlands

A2A v1 Is Here: Cross-Platform Agent Communication in Microsoft Agent Framework for .NET — the A2A Protocol just hit v1.0, and both the A2A Agent (client) and A2A Hosting (server) packages for .NET are updated to match.

What A2A v1 actually is

A2A is an open interoperability protocol for AI agents backed by a technical steering committee with representatives from AWS, Cisco, Google, IBM Research, Microsoft, Salesforce, SAP, and ServiceNow. The v1 label means it is now a stable, production-ready standard — not a moving target. The SDK and Agent Framework packages that implement it are still in preview, but the protocol itself is locked.

v1 improves on v0.3 with multi-tenancy support, signed Agent Cards for cryptographic identity, improved security flows, and a web-aligned architecture overall.

Connecting to a remote A2A agent

A remote A2A agent is just an AIAgent in your code — same RunAsync, same streaming, same session handling. Two ways to get one:

using A2A;
using Microsoft.Agents.AI;

// Discovery via well-known URI
A2ACardResolver resolver = new(new Uri("https://a2a-agent.example.com"));
AIAgent agent = await resolver.GetAIAgentAsync();
Console.WriteLine(await agent.RunAsync("What's the weather in Seattle?"));

// Direct configuration
A2AClient a2aClient = new(new Uri("https://a2a-agent.example.com"));
AIAgent agent = a2aClient.AsAIAgent(name: "my-agent", description: "A helpful assistant.");

// Streaming works the same way
await foreach (var update in agent.RunStreamingAsync("Write a short summary..."))
    Console.Write(update.Text);

The A2ACardResolver approach does automatic discovery via the /.well-known/agent-card.json endpoint. The direct A2AClient path gives you explicit control over the name and description surfaced to your orchestration layer.

Exposing your agent as an A2A endpoint

Any AIAgent you’ve already built — on Microsoft Foundry, Azure OpenAI, OpenAI, Anthropic, or AWS Bedrock — can be exposed as an A2A endpoint with two lines in ASP.NET Core:

builder.Services.AddKeyedSingleton<AIAgent>("weather-agent", (sp, _) => ...);
builder.AddA2AServer("weather-agent");
// agent card auto-discovered at /.well-known/agent-card.json

The agent card is served automatically at the well-known URI, so any A2A-compliant client can discover and call your agent without extra configuration.

What this means in practice

The stable v1 protocol means you can wire your .NET agents to agents built in Python, Java, or any other language without worrying about breaking changes. The cryptographic identity in signed Agent Cards also gives you a foundation for trust verification between agents — useful once you’re operating more than a handful of them.

See the full post for the complete changelog and migration notes from v0.3.

Share:
View source code for this post on GitHub ↗
← Azure DevOps MCP Server April Update: WIQL Queries, PAT Auth, and Experimental MCP Apps
WinApp VS Code Extension: Run, Debug, and Package Windows Apps Without Leaving the Editor →