The 2026 Agent Frameworks Landscape
|
This content was generated with the assistance of AI and should be verified against the official documentation of each tool and framework before being relied on in production. This section’s bibliography lists the reference material consulted while preparing these pages. |
Every version below was read from the framework’s own package registry (PyPI, Maven Central, npm, crates.io, NuGet) on 2026-09-28, and every capability cell was checked against the installed package’s public API or its official repository documentation on that date. Frameworks in this space release weekly; treat the table as a dated snapshot and re-check a framework’s own documentation before choosing it. The deeper, framework-specific material lives elsewhere in this AI section: the LangChain sub-section and the Spring AI sub-section cover those two frameworks in full.
Comparison
| Framework | Language | Paradigm | State / persistence | Multi-agent | MCP / A2A support | Status (2026-09-28) |
|---|---|---|---|---|---|---|
LangGraph |
Python, TypeScript |
Low-level graph of nodes and edges over typed state; you build the loop |
Checkpointers per thread (in-memory, SQLite, Postgres); cross-thread stores with semantic search |
Supervisor via tools, handoffs/swarm ( |
MCP via |
Stable 1.x ( |
LangChain |
Python, TypeScript |
Prebuilt tool-calling agent on LangGraph, customised with middleware |
LangGraph checkpointer and store |
Sub-agents as tools; |
MCP via |
Stable 1.x ( |
OpenAI Agents SDK |
Python, TypeScript |
Lightweight agents with handoffs, guardrails and tracing |
Sessions (SQLite, Conversations API, custom) |
Handoffs; agents as tools |
MCP built in (local and hosted MCP tools); no built-in A2A |
0.x, actively developed ( |
Claude Agent SDK |
Python, TypeScript |
The Claude Code agent harness as a library: built-in tools, permissions, hooks |
Resumable and forkable sessions, pluggable session store |
Subagents ( |
MCP built in (including in-process SDK servers); no built-in A2A |
0.x, actively developed ( |
Microsoft Agent Framework |
Python, .NET |
Agents plus graph-based workflows; successor to AutoGen and Semantic Kernel agents |
Agent sessions with history providers; workflow checkpointing |
Sequential, concurrent, handoff, group-chat and Magentic orchestrations |
MCP and A2A both built in |
GA since 1.0 (2026-04-03); |
CrewAI |
Python |
Role-based Crews of agents plus event-driven Flows |
Built-in crew memory; Flow state with |
Sequential and hierarchical crews, delegation |
MCP and A2A ( |
Stable 1.x ( |
smolagents |
Python |
Minimal agents; |
In-run step memory; persistence is the application’s |
Managed agents |
MCP via |
Stable 1.x ( |
Google ADK |
Python, Java, Go, TypeScript |
Code-first |
Session and memory services |
Sub-agents, agents as tools |
MCP ( |
Stable ( |
LangChain4j |
Java |
AI Services plus an agentic module (workflows, supervisor, planners) |
|
Supervisor agent, workflow composition, custom planners |
MCP client ( |
Core stable 1.x (1.20.2); agentic modules still beta (1.20.2-beta30) |
Spring AI |
Java (Spring Boot) |
|
|
Tools calling other clients; community subagents ( |
MCP client and server built in; A2A only via community projects |
Stable 2.0 (2.0.1; 2.1 in milestones) |
Mastra |
TypeScript |
Agents plus workflows, with a built-in dev server |
Memory (threads, working memory, semantic recall) over pluggable storage |
Agent networks, agents as tools |
MCP ( |
Stable 1.x ( |
Rig |
Rust (see the Rust Reference) |
Composable LLM building blocks: agents, tools, RAG, pipelines |
Application-managed |
Composition (agents as tools) |
MCP through the |
0.x ( |
The Java rows reflect the version baseline used throughout this sub-section; see Spring AI and A2A for why "community only" matters for A2A v1.0.
2026 deprecations and migrations
Several frameworks that older books and tutorials build on were retired or superseded in 2025-2026. This matters when following a book’s code: an example can be conceptually sound and still not run.
The OpenAI Assistants API was sunset on 2026-08-26; its replacement is the Responses API with the Conversations API for state, plus the OpenAI Agents SDK for agent orchestration, and OpenAI’s migration guide maps threads, runs and assistants onto the new primitives (Assistants API migration guide). Code written against Assistants — including examples in books published before the sunset — no longer runs.
AutoGen and the agent features of Semantic Kernel have been superseded by the Microsoft Agent Framework, which reached general availability with version 1.0 on 2026-04-03; AutoGen is in maintenance mode, and Microsoft publishes migration guides from both (Microsoft Agent Framework blog).
Prompt flow is scheduled for retirement on 2027-04-20; new flows should be built elsewhere, and existing ones migrated before that date.
Two API changes inside living frameworks are worth knowing as well: LangChain 1.x replaced the 0.x
create_react_agent with langchain.agents.create_agent plus middleware (see
LangGraph v1 release notes), and CrewAI’s current
model is Crews plus Flows.
Choosing a framework
There is no single best framework; there is a best fit for a team and a problem. Weigh:
-
Language and platform. Use what the team and the rest of the system already run: LangChain4j or Spring AI in a Java estate, Microsoft Agent Framework in .NET, Mastra in TypeScript, Rig in Rust, and any of the Python frameworks otherwise.
-
Control vs. convenience. Low-level graphs (LangGraph, Microsoft Agent Framework workflows) give full control of the loop and state; prebuilt agents (
create_agent, OpenAI Agents SDK, CrewAI crews, Claude Agent SDK) are faster to start with and harder to bend. -
Model coupling. Vendor SDKs (OpenAI Agents SDK, Claude Agent SDK) are tuned for their own models and platform; the others are model-agnostic. Check whether the provider-neutral ones support the features you need (prompt caching, reasoning controls) on your model.
-
State and durability. Long-running or human-in-the-loop agents need durable checkpoints and resumable runs (see Human-in-the-Loop).
-
Interoperability. MCP support is now table stakes; A2A support matters if your agents must work with other teams' agents (see Agent-to-Agent Protocol (A2A)).
-
Observability and evaluation. Prefer frameworks that emit OpenTelemetry GenAI spans or integrate with your tracing backend (see Observability for Agents).
-
Maturity and stability. A 0.x version number means breaking changes are expected; beta modules (LangChain4j’s agentic module) likewise. Budget for upgrades.
-
Lock-in. Keep business logic in plain functions and tools, and let the framework own only orchestration, so a later switch is a rewrite of the thin layer, not of everything.
# docsassistant/core.py -- business logic with no framework imports
from docsassistant.search import search_docs
def search_docs_core(query: str, k: int = 5) -> list[dict]:
"""Search this site's documentation; returns page paths, sections and snippets."""
return search_docs(query, k=k)
# LangChain / LangGraph
from langchain_core.tools import StructuredTool
lc_tool = StructuredTool.from_function(search_docs_core, name="docs_search")
# OpenAI Agents SDK
from agents import function_tool
oa_tool = function_tool(search_docs_core, name_override="docs_search")
# Claude Agent SDK: in-process MCP server
from claude_agent_sdk import create_sdk_mcp_server, tool
@tool("docs_search", "Search this site's documentation.", {"query": str, "k": int})
async def claude_docs_search(args: dict) -> dict:
hits = search_docs_core(args["query"], args.get("k", 5))
return {"content": [{"type": "text", "text": str(hits)}]}
docs_server = create_sdk_mcp_server(name="docs", tools=[claude_docs_search])
The function is the asset; each wrapper is a few lines. StructuredTool.from_function and the OpenAI Agents SDK’s
function_tool infer the schema from the signature and docstring; the Claude Agent SDK’s @tool takes an explicit
input schema and exposes the tool through an in-process MCP server (create_sdk_mcp_server), which is then passed
to ClaudeAgentOptions(mcp_servers=…). See LangChain — Tools, OpenAI Agents SDK and
Claude Agent SDK — Overview.
A framework’s overhead shows up directly in cost. For a run of model calls with input and output tokens at prices and per token,
so a framework that adds a planning call, a large default system prompt or verbose tool schemas to every step raises or every . Measure it with a trace of a representative task before committing (see Cost, Latency & Throughput).