Overview & Positioning
Key Points
- Microsoft Agent Framework GA April 2026. Replaces Semantic Kernel orchestration + AutoGen for new work.
- Built on
Microsoft.Extensions.AI. UsesIChatClientunder the hood. - Capabilities: single agent, multi-agent orchestration (5 patterns), workflows, MCP integration, A2A protocol.
- For new projects: this is the .NET orchestration layer.
- For existing SK apps: SK still works; migrate when feasible.
What it is
A higher-level abstraction over IChatClient for building agentic apps:
- Agent = persona + instructions + tools + memory.
- Orchestration = coordinating multiple agents.
- Workflow = deterministic multi-step pipeline (more constrained than free-form agents).
- Tools = functions; can come from MCP servers.
Why it exists
2024 reality:
- Semantic Kernel: SK Planners; ChatHistory; .NET-specific.
- AutoGen: Python-first; multi-agent; Microsoft Research origin.
- LangChain (Python): de-facto.
2026 reality:
- Microsoft Agent Framework: unified .NET orchestration.
- Built on Microsoft.Extensions.AI (the new abstraction).
- First-party support; OTel; eval-friendly.
Core abstractions
public abstract class Agent
{
public string Name { get; init; }
public string? Description { get; init; }
public string? Instructions { get; init; }
public abstract Task<AgentResponse> InvokeAsync(IEnumerable<ChatMessage> messages, CancellationToken ct);
}
public class ChatClientAgent : Agent
{
public IChatClient ChatClient { get; init; }
public IList<AITool> Tools { get; init; }
// ...
}
Hello agent
var agent = new ChatClientAgent(chatClient)
{
Name = "Assistant",
Instructions = "You are a helpful assistant. Be concise."
};
var response = await agent.InvokeAsync("What's 2+2?");
Console.WriteLine(response.Messages.Last().Text);
Or:
Tools
var agent = new ChatClientAgent(chat)
{
Instructions = "...",
Tools = [
AIFunctionFactory.Create(GetWeather),
new MCPToolAdapter("https://my-mcp-server")
]
};
Tools can be: - .NET methods (via AIFunctionFactory). - MCP servers (uniform interface across vendor agents).
Memory / threads
var thread = new AgentThread();
await agent.InvokeAsync("Hello", thread);
await agent.InvokeAsync("What's my name?", thread); // remembers context
Threads persist conversation state. Pluggable storage.
Multi-agent orchestration patterns
| Pattern | Use |
|---|---|
| Sequential | Step 1 → Step 2 → Step 3 |
| Concurrent | Multiple agents in parallel; aggregate |
| Group chat | Round-robin; manager-decided |
| Handoff | Routing-based; agent decides who's next |
| Magentic | Plan-and-execute pattern |
Detailed in subsequent topic files.
Workflows vs Agents
- Agents: free-form; LLM-driven flow.
- Workflows: structured; deterministic; LLM only at well-defined steps.
For known-procedure tasks: workflow. For exploratory tasks: agent.
See Workflows vs Agents.
MCP integration
var agent = new ChatClientAgent(chat)
{
Tools = [.. await MCPClient.LoadToolsFromServer("https://github-mcp-server")]
};
MCP makes tools cross-platform. See MCP Integration.
A2A protocol
Agents from different vendors / systems communicate via standardized messages. Early in 2026.
Migration
| From | To |
|---|---|
| SK Planners | Agent Framework + tool-calling |
| SK ChatHistory | AgentThread |
| AutoGen multi-agent | Agent Framework orchestration |
See Migration from SK and AutoGen.
When NOT use Agent Framework
- Simple chat completion → just
IChatClient. - One-off RAG → no need for full agent.
- Highly constrained workflow → use Durable Functions or similar.
Senior considerations
- Don't reach for agents when a function call suffices.
- Multi-agent costs scale linearly with calls — measure.
- Always trace; agent flows can be opaque without OTel.
- Test deterministically where you can; agentic tests are flaky.