Catalog PyPI
PACKAGE EXPLORERView in registry

a2a-adapter

PyPI

Convert any AI agent into an A2A Protocol server in 3 lines

Versions collected1
Direct dependencies14From release 0.2.14
Last observed20 Oct, 16:23 UTC

README

Version 0.2.14 documentation

A2A Adapter

PyPI version License: Apache-2.0 Python 3.11+

Make any AI agent an A2A Protocol server: a few lines of Python for your own agent, or one command for a local agent like Claude Code or Pi.

a2a-adapter wraps agent CLIs, local agents, workflow engines, and Python agent frameworks behind the A2A (Agent-to-Agent) Protocol. It handles AgentCard generation, JSON-RPC, task lifecycle, and streaming through the official A2A SDK, so your adapter only needs to invoke the underlying agent.

Works with Claude Code, Codex, Pi, OpenClaw, n8n, LangGraph, LangChain, CrewAI, Ollama, Hermes Agent, and custom Python functions.

Two Ways to Use It

Python SDKCLI
Use it whenYou're writing an agent (or wrapping a framework) and want it to speak A2AYou want to put an existing local agent such as Claude Code or Pi on A2A, without writing code
Installpip install a2a-adapter in your project's virtualenvuv tool install a2a-adapter (or pipx install a2a-adapter)
Runserve_agent(adapter, port=9000) in your codea2a-adapter claude --port 9010

Both need Python 3.11+ and serve the same A2A server, with an auto-generated Agent Card at /.well-known/agent-card.json.

1. Use It as an SDK

Add A2A support to your own agent code. Install a2a-adapter into your project's virtual environment, with extras for the framework you use:

pip install a2a-adapter              # core
pip install "a2a-adapter[langchain]" # or [crewai], [langgraph], [all]

Wrap your agent in an adapter and serve it:

from a2a_adapter import CallableAdapter, serve_agent

async def my_agent(inputs: dict) -> str:
    return f"Echo: {inputs['message']}"

adapter = CallableAdapter(func=my_agent, name="Echo Agent")
serve_agent(adapter, port=9000)

Your agent is now an A2A server at http://localhost:9000, with its Agent Card at http://localhost:9000/.well-known/agent-card.json. To mount it in an existing ASGI app instead, use to_a2a(adapter).

Supported SDK Adapters

Framework or agentAdapterStreamingExample
Claude CodeClaudeCodeAdapterYesclaude_code_agent.py
CodexCodexAdapterNocodex_agent.py
PiPiAdapterYespi_agent.py
OpenClawOpenClawAdapterNoopenclaw_agent.py
n8nN8nAdapterNon8n_agent.py
LangGraphLangGraphAdapterYeslanggraph_server.py
LangChainLangChainAdapterYeslangchain_agent.py
CrewAICrewAIAdapterNocrewai_agent.py
OllamaOllamaAdapterYesollama_agent.py
Hermes AgentHermesAdapterYeshermes_agent.py
Python callableCallableAdapterOptionalquickstart.py
Custom classBaseA2AAdapterOptionalcustom_adapter.py

2. Use It as a CLI

Start a classic local agent (Claude Code, Codex, Pi, or OpenClaw) as an A2A server with one command.

Install the CLI as an isolated tool, so the a2a-adapter command lands on your PATH:

uv tool install a2a-adapter    # or: pipx install a2a-adapter

Upgrade later with uv tool upgrade a2a-adapter. Avoid a system-wide pip install: macOS's built-in pip runs Python 3.9, which is too old, and Homebrew and many Linux distributions block it (PEP 668).

Make sure the agent works on its own. a2a-adapter wraps the agent you already have; it doesn't install it. For example, install Claude Code and run claude once to sign in. If the agent isn't on PATH, pass --executable /path/to/agent.

Start it from the project directory the agent should work in:

a2a-adapter claude --port 9010
a2a-adapter pi --port 9012
a2a-adapter codex --port 9011
a2a-adapter openclaw --port 9008

Options before -- configure the A2A server. Options after -- are passed to the underlying agent CLI:

a2a-adapter claude --port 9010 -- --model <model>
a2a-adapter pi --port 9012 -- --model <model> --thinking high
a2a-adapter codex --port 9011 -- --model <model> --sandbox workspace-write
a2a-adapter openclaw --port 9008 --agent-id main --thinking high
Server optionDefaultPurpose
--cwdcurrent directoryDirectory the agent works in
--host / --port127.0.0.1 / 9000Bind address; use --host 0.0.0.0 to accept remote connections
--name<Agent> (<folder>), e.g. Claude Code (my-app)Agent Card display name
--description<Agent> agent working in <folder>Agent Card description
--timeout600Per-request timeout in seconds
--executableclaude, codex, pi, openclawPath to the agent executable

Pi source commands can be selected without a shell wrapper:

A2A_PI_COMMAND='npx tsx /path/to/pi/packages/coding-agent/src/cli.ts' \
  a2a-adapter pi --port 9012

Run a2a-adapter -help for the supported agents, or a2a-adapter <agent> -help for agent-specific usage. The adapter owns protocol and session flags such as Pi's --mode rpc and Codex's --json; those flags cannot be overridden after --.

Configuring the Agent

The adapter runs the agent non-interactively (for example claude -p or codex exec), so there's no agent UI to change settings in. You configure it the same way you would without the adapter, in two ways:

  • The agent's own config files. The adapter runs the agent as you, in the --cwd folder, so it reads your usual setup: ~/.claude/settings.json, CLAUDE.md, and MCP servers for Claude Code; ~/.codex/config.toml and AGENTS.md for Codex; Pi's settings and installed extensions. Claude Code, Codex, and OpenClaw start a fresh process for each request, so changes apply to the next request. Pi keeps one process running, so restart the server after changing Pi's config.
  • Native CLI flags after --. Use these for settings that should apply only to this server, such as a different model or sandbox mode.

Documentation

Star History

Star History Chart

License

Apache-2.0 - see LICENSE.

Built by HYBRO AI. Powered by the A2A Protocol.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.2.1416 Oct 202614

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
hybroai/a2a-adapter

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 16:23 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:7f51c89cf018d95356554d6e85aaa79f3f6fc1f8f9d424af9d7e5ff617502899