Comparisons

LangGraph vs CrewAI for A2A: what each supports as of September 2026

LangGraph's Agent Server exposes graphs as A2A 1.0 JSON-RPC endpoints. CrewAI agents can call and serve A2A at protocol 0.3. Versions, features and gaps.

LangGraph is for building stateful agents as graphs, mixing hand-coded steps and model-driven steps with explicit control over the flow. CrewAI is for building teams of role-based agents, called crews, inside event-driven workflows called flows. Both can take part in A2A (Agent2Agent) exchanges, but they approach the protocol from different sides, and the details matter if you need them to talk to agents built elsewhere.

In short: LangGraph’s A2A support lives in its Agent Server, which exposes each deployed assistant as an A2A 1.0 server. CrewAI builds A2A into its Agent class, so an agent can delegate to remote A2A agents, serve A2A requests, or both, at A2A protocol 0.3. This page records what each project’s own documentation and package metadata said on September 26, 2026. Both move quickly, so check again before you build.

Status as of September 26, 2026.

  • LangGraph: langgraph 1.2.12 (September 21, 2026), MIT license, maintained by LangChain. A2A support is in Agent Server, the langgraph-api package, at 0.15.1 (September 25, 2026), published on PyPI under the Elastic License 2.0.
  • CrewAI: crewai 1.15.22 (September 16, 2026), MIT license, maintained by CrewAI Inc. A2A support ships as the crewai[a2a] extra, which requires a2a-sdk 0.3.x (~=0.3.10).
  • A2A: a Linux Foundation project at protocol version 1.0; latest release v1.0.1, May 28, 2026.

Neither project’s A2A page carries an experimental or beta label.

LangGraph and A2A

LangGraph describes itself as a low-level orchestration framework and runtime for long-running, stateful agents. The open-source library runs graphs. Serving them over A2A is the job of Agent Server, the runtime behind langgraph dev locally and LangSmith Deployment in production.

What the A2A page documents:

  • Endpoint. Each assistant is reachable at /a2a/{assistant_id}. Its Agent Card is at /.well-known/agent-card.json?assistant_id={assistant_id} and declares one interface.
  • Version and binding. Agent Server speaks the A2A 1.0 JSON-RPC binding. It also accepts four 0.3 method names (message/send, message/stream, tasks/get, tasks/cancel) so existing 0.3 clients keep working; the method name you use selects 1.0 or 0.3 response shapes. gRPC and HTTP+JSON are not implemented.
  • Methods. SendMessage, SendStreamingMessage (over Server-Sent Events), GetTask, CancelTask, ListTasks and GetExtendedAgentCard are supported. SubscribeToTask and the push notification configuration methods return -32601 for now, so push notifications are not available.
  • Graph requirements. The graph’s state must include a messages key to accept text and file parts.
  • Versions. The endpoint needs langgraph-api 0.4.21 or later; file parts, data parts for tool results and configurable card modes arrived between 0.12.0 and 0.13.0, and a history-scope extension and A2UI v0.9 support in 0.15.0.
  • Tracing. Agent Server maps the A2A contextId to a LangSmith thread_id, so a multi-agent conversation groups into one trace thread.

The documentation focuses on the server side. Its examples of agents talking to each other send JSON-RPC requests to the endpoint directly; it describes no dedicated A2A client class. The A2A page does not describe authentication settings for the endpoint.

CrewAI and A2A

CrewAI describes flows as structured, event-driven workflows that manage state, and crews as teams of autonomous agents that collaborate on tasks a flow delegates to them. A2A support attaches to an individual agent through its a2a parameter.

What the A2A page documents:

  • Client. A2AClientConfig points an agent at a remote Agent Card URL. The agent then decides, task by task, whether to handle work itself or delegate it to the remote agent. Several remote agents can be configured at once.
  • Server. A2AServerConfig exposes a CrewAI agent as an A2A server and generates its Agent Card, with skills derived from the agent’s tools if none are given. An agent can hold both configurations.
  • Version. The server’s protocol_version defaults to 0.3.0, matching the a2a-sdk 0.3 dependency.
  • Bindings. Client and server transport settings accept JSONRPC, GRPC and HTTP+JSON.
  • Updates. The client supports streaming (the default), polling, and push notifications. On the server, capabilities default to streaming on and push notifications off; a push configuration can sign outgoing notifications with an HMAC-SHA256 secret.
  • Auth. Client options include bearer tokens, OAuth 2.0 (client credentials and authorization code), API keys, HTTP Basic and HTTP Digest. Incoming requests default to a simple token check against an AUTH_TOKEN environment variable.
  • Card signing. The server can sign its Agent Card with JWS (RS256, ES256, PS256 and related algorithms).
  • Deprecation. The older A2AConfig class is deprecated and will be removed in CrewAI 2.0.0.

The page also points to CrewAI’s hosted platform, AMP, for production A2A features. This comparison covers the open-source framework.

Side by side

LangGraph (Agent Server) CrewAI
Purpose Stateful agent graphs with explicit control flow Role-based agent crews inside event-driven flows
Layer Framework plus a server runtime that exposes A2A Framework with A2A built into the agent
Who talks to whom Outside A2A clients call a deployed assistant A CrewAI agent calls remote A2A agents, serves A2A clients, or both
Transport A2A 1.0 JSON-RPC binding only; SSE streaming JSON-RPC, gRPC or HTTP+JSON, configurable
Discovery Card at /.well-known/agent-card.json?assistant_id=... Card at /.well-known/agent-card.json; clients take a card URL
Auth Not described on the A2A page Bearer, OAuth 2.0, API key, Basic, Digest; token check on the server by default; optional JWS card signing
State A2A contextId mapped to a thread; tasks listable Streaming, polling or push updates on the client
Governance and status LangChain; langgraph 1.2.12 (MIT), langgraph-api 0.15.1 (Elastic License 2.0) CrewAI Inc.; crewai 1.15.22 (MIT); A2A on a2a-sdk 0.3

When each fits

LangGraph’s Agent Server fits when you want an A2A 1.0 server in front of a graph you already run, with LangSmith tracing across agents. Plan around its current gaps: JSON-RPC only, no SubscribeToTask, no push notifications, and no documented client helper.

CrewAI fits when your agents need to delegate to remote A2A agents from inside a crew, or when you want client and server in one agent with a choice of bindings, push notifications and card signing. Plan around its protocol version: 0.3 clients and servers need a 1.0 counterpart that still accepts 0.3.

Using them together

A2A is meant to make the framework on the other side irrelevant, and the version is the main thing to check. A CrewAI client speaking 0.3 can call a LangGraph Agent Server for sending, streaming, reading and canceling tasks, because Agent Server accepts those four 0.3 method names. A LangGraph-based client calling a CrewAI server needs to speak 0.3, send no A2A-Version header or A2A-Version: 0.3, and use 0.3 shapes such as lowercase task states. Migrating from A2A 0.3 to 1.0 lists the differences.

Run each exchange you depend on against the real counterparty. Check the Agent Card’s capabilities before relying on streaming or push, and handle -32601 and -32004 responses cleanly.

Common misconceptions

“LangGraph speaks A2A.” The LangGraph library runs graphs. Agent Server, a separate package under a different license, exposes them over A2A.

“CrewAI’s A2A support is version 1.0.” Its A2A extra depends on a2a-sdk 0.3 and its server defaults to protocol version 0.3.0 as of this date.

“A2A support means the whole protocol.” Each implementation covers a subset. Agent Server returns method-not-found for SubscribeToTask and push configuration today, and neither project documents every optional feature.

“Choosing one framework ties you to it on both ends.” Any compliant A2A client can call any compliant A2A server. Whether a given pair works depends on protocol version and binding compatibility.

Questions

Which A2A version does each framework speak?
As of September 26, 2026, LangGraph's Agent Server speaks A2A 1.0 over JSON-RPC and also accepts four 0.3 method names. CrewAI's A2A support is built on a2a-sdk 0.3, and its server configuration defaults to protocol version 0.3.0.
Can a CrewAI agent call a LangGraph agent over A2A?
It should work for the basic operations, because Agent Server accepts the 0.3 names message/send, message/stream, tasks/get and tasks/cancel and answers in 0.3 shapes when those names are used. Test the exact calls your crew makes, since other 0.3 methods return method-not-found.

Sources

  1. LangChain docs: A2A endpoint in Agent Server (accessed )
  2. LangChain docs: LangGraph overview (accessed )
  3. PyPI: langgraph 1.2.12 (September 21, 2026) (accessed )
  4. PyPI: langgraph-api 0.15.1 (September 25, 2026; Elastic License 2.0) (accessed )
  5. LangGraph repository (MIT license) (accessed )
  6. CrewAI docs: Agent-to-Agent (A2A) Protocol (accessed )
  7. CrewAI docs: Introduction (Crews and Flows) (accessed )
  8. PyPI: crewai 1.15.22 (September 16, 2026), a2a extra requires a2a-sdk ~=0.3.10 (accessed )
  9. CrewAI repository (MIT license) (accessed )
  10. A2A Protocol Specification (sections 3.6, 5 and 9) (accessed )
  11. A2A releases on GitHub (v1.0.1, May 28, 2026) (accessed )