Skip to main content

Integrate A2A protocol agents into LangChain/LangGraph applications

Project description

A2A LangChain Adapters

A production-ready Python package for integrating A2A protocol agents into LangChain/LangGraph. Enables stateful conversations, streaming, multi-turn context management, and seamless LLM tool binding with A2A agents.

Build DeepSource DeepSource DeepSource Ruff mypy deptry

🎯 Why This Package?

Integrating A2A protocol agents into LangChain/LangGraph required custom implementations each time. This package standardizes that pattern with a production-ready, well-tested solution. Currently in early release—feedback and contributions welcome.

✨ Features

  • Agent-First Architecture: A2ARunnable preserves full A2A protocol semantics (streaming, task lifecycle, multi-turn conversations)
  • Multi-Transport Support: HTTP (default) and gRPC with auto-detection
  • Task Resubscribe: Reconnect to interrupted streaming tasks for resilience
  • Structured Data: Send/receive JSON-RPC data alongside text
  • File Handling: Upload and download files with URI and bytes patterns
  • Authentication: Bearer tokens, API keys, mTLS, custom headers
  • LLM Tool Binding: Expose agents as LangChain tools for function calling
  • Streaming Support: Real-time Server-Sent Events for long-running tasks
  • Type-Safe: Full mypy strict type checking, async-first design

📦 Installation

Basic (HTTP only)

pip install a2a-langchain-adapters

With gRPC Support

pip install a2a-langchain-adapters[grpc]

🚀 Quick Start

Basic Usage

import asyncio
from a2a_langchain_adapters import A2ARunnable

async def main():
    # Create agent runnable by discovering agent card
    agent = await A2ARunnable.from_agent_url("http://agent.example.com")

    # Send a message and get result
    result = await agent.ainvoke("What is 2 + 2?")
    print(f"Response: {result.text}")

    await agent.close()

asyncio.run(main())

Streaming

async for event in agent.astream("Explain quantum computing"):
    if event.text:
        print(event.text, end="", flush=True)

Multi-Turn Conversations

# Initial message
result = await agent.ainvoke("Tell me about Python")

# Follow-up in same context
agent_conv = agent.with_context(result.context_id)
followup = await agent_conv.ainvoke("What about async?")

Structured Data

# Send JSON data
data = {"action": "analyze", "target": "sales_q4"}
result = await agent.ainvoke(data)
print(result.data)  # Structured response

🛠️ Development

This project uses Just for task automation. All commands are defined in the Justfile.

Setup

just setup

Available Commands

just help              # Show all available commands
just setup             # Setup development environment
just build             # Build the project
just qa                # Run quality assurance (format, lint, type check, dependency check)
just test              # Run tests
just coverage          # Run tests with coverage report

Manual Commands (without Just)

# Setup
uv sync --python=3.13

# Run tests
pytest tests/ -v

# Type checking
mypy src/ --strict

# Linting and formatting
ruff format src/ tests/
ruff check --fix src/ tests/
ruff check --select I --fix src/ tests/

# Dependency checking
deptry .

# Coverage
pytest --cov=src --cov-report=html tests/

☕ Support the Project

If this project helps you, consider supporting its development:

"Buy Me A Coffee"

Your support helps keep the project maintained and growing ❤️

📄 License

This project is licensed under the MIT License. See the LICENSE file for details.

📚 Documentation

Getting Started

External Resources

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

a2a_langchain_adapters-0.1.0.tar.gz (133.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

a2a_langchain_adapters-0.1.0-py3-none-any.whl (24.9 kB view details)

Uploaded Python 3

File details

Details for the file a2a_langchain_adapters-0.1.0.tar.gz.

File metadata

  • Download URL: a2a_langchain_adapters-0.1.0.tar.gz
  • Upload date:
  • Size: 133.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for a2a_langchain_adapters-0.1.0.tar.gz
Algorithm Hash digest
SHA256 804c5ae61996c9f7ed7bc8222e3f2e39d6c9d7453ba8753fbf9408048a980f5f
MD5 f96b807bfdc916a0251a2c84f83d02c8
BLAKE2b-256 41986d81ac6329e2c5dbfe4d11bc39a64993c19070f8871f56ebdbce9c5daebe

See more details on using hashes here.

Provenance

The following attestation bundles were made for a2a_langchain_adapters-0.1.0.tar.gz:

Publisher: release.yml on janrauchfuss/a2a-langchain-adapters

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file a2a_langchain_adapters-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for a2a_langchain_adapters-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e1d385a6aca33c882980fe2228ed391274f3d0f4e6b70b7ddc9074e39fc9ff19
MD5 1f915c181dccabb2065a588daef65583
BLAKE2b-256 ab8cb0ccf15d0e9c74f58c981fa6be9ef89895eca2709022c61ec0d81b42013c

See more details on using hashes here.

Provenance

The following attestation bundles were made for a2a_langchain_adapters-0.1.0-py3-none-any.whl:

Publisher: release.yml on janrauchfuss/a2a-langchain-adapters

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page