About A2a Go
A2a Go is an MCP server in the Agents category: tutorial for Model Context Protocol (MCP) and Agent-to-Agent (A2A) protocols.
The repository has 14 stars and 0 forks.
Install
git clone https://github.com/TheApeMachine/a2a-goThis server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.
Ask AI
Ask AI about A2a Go
Powered by Claude · Grounded in docs
Security checks
- ✓README presentThe repository ships documentation.
5 checks have not been run yet.
README
🌈 A2A‑Go
"Combine A2A and MCP to create advanced, distributed agentic systems!"
A2A-Go is a comprehensive framework for building scalable, distributed agentic AI systems with built-in VPN capabilities. It promotes a microservice architecture where agents and tools operate as independent services, deployable locally or across a network. The framework implements the Agent-to-Agent (A2A) protocol and utilizes the Model Context Protocol (MCP) for standardized tool interaction and data exchange.

a2a‑go is a reference Go implementation of the Agent‑to‑Agent (A2A) protocol by Google, including the proposed interoperability with the Model Context Protocol (MCP).
🚧 Work in progress 🚧 Consider this project a proof of concept at best, and subject to sudden changes.
📋 Table of Contents
- Features
- Architecture
- Prerequisites
- Quick Start
- Installation
- Usage
- VPN Capabilities
- Built-in Tools
- Agent Ecosystem
- Configuration
- Development
- Contributing
- Documentation
✨ Features
🔌 Agent‑to‑Agent (A2A) Protocol Implementation
-
Task Management
- Send Task to send a new task to an agent
- Get Task to retrieve a task by ID
- Cancel Task to cancel a task
- Stream Task to stream the task results
- Set Push Notification to configure push notifications for a task
- Get Push Notification to retrieve the push notification configuration for a task
-
Advanced AI Capabilities
- Structured Outputs to return structured data from an agent
- Fine‑tuning to fine‑tune an agent on a dataset
- Image Generation to generate images with an agent
- Audio Transcription to transcribe audio
- Text‑to‑Speech to convert text to speech
🛠️ Model Context Protocol (MCP) Interoperability
-
Prompt Management
- List Prompts to retrieve a list of prompts from an agent
- Get Prompt to retrieve a prompt by ID
- Set Prompt to create or update a prompt
- Delete Prompt to delete a prompt by ID
-
Resource Management
- List Resources to retrieve a list of resources from an agent
- Get Resource to retrieve a resource by ID
- Set Resource to create or update a resource
- Delete Resource to delete a resource by ID
-
Tool Calling & Sampling
- Tool Calling to call tools and receive the results
- Sampling to sample a task from an agent
- Roots to get the root task for a task
🔐 VPN & Networking
- WireGuard VPN Integration
- Built-in VPN client using WireGuard protocol
- SOCKS5 proxy support for browser tool
- Network stack integration with gVisor
- Browser network context switching
🏗️ Infrastructure & Deployment
-
Containerized Architecture
- Docker Compose orchestration
- Kubernetes deployment manifests
- MinIO object storage integration
- Service discovery and registration
-
Enterprise Integration
- Azure DevOps complete integration suite
- GitHub API integration
- Slack notifications and webhooks
- OAuth2 authentication system
🏛️ Architecture
A2A-Go implements a distributed microservice architecture where each component runs independently:
graph TB
subgraph "A2A-Go Distributed Architecture"
subgraph "Service Layer"
Catalog["🗂️ Catalog Service<br/>:3210<br/>(Registry)"]
Manager["🤖 Manager Agent<br/>:8080<br/>(Orchestrator)"]
Planner["📋 Planner Agent<br/>:8081<br/>(Strategy)"]
Researcher["🔍 Researcher Agent<br/>:8082<br/>(Intel)"]
Developer["💻 Developer Agent<br/>:8083<br/>(Code)"]
end
subgraph "Tool Layer"
Browser["🌐 Browser Tool<br/>:9001<br/>(Web Automation)"]
Docker["🐳 Docker Tool<br/>:9002<br/>(Containers)"]
Azure["☁️ Azure DevOps<br/>:9003<br/>(Enterprise)"]
GitHub["🐙 GitHub Tool<br/>:9004<br/>(Source Control)"]
end
subgraph "Infrastructure Layer"
MinIO["📦 MinIO Storage<br/>:9000<br/>(Object Store)"]
VPN["🔐 VPN Layer<br/>(WireGuard + SOCKS5)<br/>Browser Network Context"]
UI["💻 Terminal UI<br/>(Interactive Client)"]
end
end
%% Service Discovery
Catalog -.-> Manager
Catalog -.-> Planner
Catalog -.-> Researcher
Catalog -.-> Developer
%% Agent Coordination
Manager --> Planner
Manager --> Researcher
Manager --> Developer
Planner --> Developer
Researcher --> Developer
%% Tool Usage
Manager -.-> Browser
Manager -.-> Docker
Manager -.-> Azure
Manager -.-> GitHub
Developer -.-> Browser
Developer -.-> Docker
Developer -.-> GitHub
Researcher -.-> Browser
Researcher -.-> GitHub
%% Infrastructure
Manager --> MinIO
Planner --> MinIO
Researcher --> MinIO
Developer --> MinIO
UI --> Catalog
UI --> Manager
%% VPN for Browser Tool Only
Browser --> VPN
style Catalog fill:#e1f5fe
style Manager fill:#f3e5f5
style Planner fill:#f3e5f5
style Researcher fill:#f3e5f5
style Developer fill:#f3e5f5
style Browser fill:#fff3e0
style Docker fill:#fff3e0
style Azure fill:#fff3e0
style GitHub fill:#fff3e0
style MinIO fill:#e8f5e8
style VPN fill:#ffebee
style UI fill:#f1f8e9
Core Components
- Catalog Service: Central registry for agent and tool discovery
- Agent Services: Specialized AI agents (Manager, Planner, Researcher, Developer, etc.)
- Tool Services: Standalone tools exposing specific capabilities
- VPN Layer: Network context switching for browser tool using WireGuard protocol
- Storage Layer: MinIO for object storage and task persistence
- UI Layer: Terminal UI for interaction and testing
📋 Prerequisites
- Go 1.24.2 or later
- Docker and Docker Compose
- Make (for build automation)
Optional Dependencies
- Kubernetes (for K8s deployment)
- WireGuard (for VPN functionality)
- MinIO client (for storage management)
🚀 Quick Start
The fastest way to get started is using the provided Makefile to run a full containerized distributed system:
1. Start the Server Infrastructure
# Build and start all services
make server
This will:
- Build the Docker image
- Start the catalog service on port
3210 - Launch all agent and tool services
- Initialize MinIO storage
- Set up the VPN infrastructure
2. Connect with the Client
# Run the Terminal UI client
make client
The Terminal UI will connect to the distributed system and provide an interactive interface for:
- Browsing available agents and tools
- Sending tasks to agents
- Streaming real-time results
- Managing agent workflows
3. Test the System
# Run automated tests
make test
📦 Installation
From Source
# Clone the repository
git clone https://github.com/theapemachine/a2a-go.git
cd a2a-go
# Build the binary
go build -o a2a-go main.go
# Run a specific command
./a2a-go --help
Using Docker
# Build the Docker image
docker build -t theapemachine/a2a-go:latest .
# Run a specific agent
docker run -it --rm theapemachine/a2a-go:latest ui
🎯 Usage
Basic Agent Communication
# Send a task to an agent via JSON-RPC
curl -s -X POST localhost:8080/rpc \
-d '{"jsonrpc":"2.0","id":1,"method":"tasks/send","params":{"id":"t1","message":{"role":"user","parts":[{"type":"text","text":"Hello"}]}}}' \
| jq .artifacts[0].parts[0].text
Streaming Events
# Connect to Server-Sent Events stream
curl -sN localhost:3210/events | jq -c
Using Tools
# List available prompts
curl -s -X POST localhost:3210/rpc \
-d '{"jsonrpc":"2.0","id":2,"method":"prompts/list"}' \
| jq .prompts
# Fetch specific prompt content
curl -s -X POST localhost:3210/rpc \
-d '{"jsonrpc":"2.0","id":3,"method":"prompts/get","params":{"name":"Greeting"}}' \
| jq .messages[0].content.text
🔐 VPN Capabilities
A2A-Go includes a VPN solution built on WireGuard specifically for the browser tool:
Features
- WireGuard Integration: Native WireGuard protocol support
- SOCKS5 Proxy: Built-in SOCKS5 proxy server for browser traffic
- Network Stack: Custom network stack using gVisor
- Network Context Switching: Allows browser tool to operate from different network endpoints
Configuration
VPN settings are managed through the a2a.conf file:
[Interface]
PrivateKey = your_private_key_here
Address = 10.0.0.1/24
[Peer]
PublicKey = peer_public_key_here
Endpoint = vpn.example.com:51820
AllowedIPs = 10.0.0.0/24
🛠️ Built-in Tools
A2A-Go comes with an extensive set of pre-built tools:
Web & Browser Tools
- Browser: Headless browser automation with Rod
- Fetch: Web content extraction and screenshot capture
- GitHub: Repository search and content retrieval
Development Tools
- Docker: Container management and deployment
- Azure DevOps: Complete sprint and work item management
- Catalog: Agent and service discovery
Data & Storage Tools
- Memory: Persistent memory storage for agents
- Qdrant: Vector database integration
- Neo4j: Graph database operations
Communication Tools
- Slack: Notification and webhook integration
- Editor: File editing and manipulation
🤖 Agent Ecosystem
The framework includes several specialized agents:
- Manager: Orchestrates tasks and coordinates other agents
- Planner: Creates and manages project plans
- Researcher: Gathers information and conducts research
- Developer: Handles code generation and development tasks
- Evaluator: Assesses and validates agent outputs
- UI: Provides terminal-based user interface
Each agent is containerized and can be deployed independently or as part of the complete ecosystem.
⚙️ Configuration
Environment Variables
Create a .env file based on env.example:
# MinIO Configuration
MINIO_USER=minioadmin
MINIO_PASSWORD=minioadmin
AWS_ACCESS_KEY_ID=a2a-access-key
AWS_SECRET_ACCESS_KEY=a2a-secret-key
# API Keys
OPENAI_API_KEY=your_openai_key
ANTHROPIC_API_KEY=your_anthropic_key
COHERE_API_KEY=your_cohere_key
# Azure DevOps
AZURE_DEVOPS_ORGANIZATION=your_org
AZURE_DEVOPS_TOKEN=your_token
Agent Configuration
The system uses a hierarchical configuration approach:
- Embedded Defaults: Built into the binary
- User Config:
~/.a2a-go/config.yml - Environment Variables: Override specific settings
🔧 Development
Project Structure
a2a-go/
├── cmd/ # CLI commands and entry points
├── pkg/ # Core packages
│ ├── a2a/ # A2A protocol implementation
│ ├── vpn/ # VPN and networking
│ ├── tools/ # Built-in tools
│ ├── ui/ # Terminal UI
│ └── ...
├── docs/ # Documentation
├── specs/ # Protocol specifications
└── docker-compose.yml
Running Tests
# Run all tests
go test ./...
# Run with coverage
go test -cover ./...
# Run specific test suite
go test ./pkg/tools/...
Code Style
- Use GoDoc comments above all methods and types
- Follow the
/**/format for documentation - Use GoConvey for tests with one test function per code function
- Maintain clean, well-organized code structure
🤝 Contributing
- Read the Specifications: Check the
specs/directory for protocol details - Follow Code Style: Maintain consistency with existing patterns
- Write Tests: Use GoConvey and mirror code structure in tests
- Update Documentation: Keep docs current with changes
- Test the TUI: Ensure Terminal UI works with your changes
Development Workflow
# Start development environment
make server
# Make your changes
# ...
# Test your changes
make test
# Test with client
make client
📚 Documentation
Comprehensive documentation is available in the docs/ directory:
- Quick Start Guide: Get up and running quickly
- Architecture Overview: System design and components
- Tools Documentation: Built-in tools and capabilities
- Memory Architecture: Agent memory systems
- Prompts Guide: Prompt management and usage
- Sampling Documentation: Task sampling strategies
- Resources Guide: Resource management
Protocol Specifications
The specs/ directory contains detailed protocol specifications:
- A2A Protocol: Complete Agent-to-Agent specification
- MCP Integration: Model Context Protocol implementation details
- Tool Definitions: Comprehensive tool capability specifications
📄 License
This project is released under the UNLICENSE, placing it in the public domain.
🔗 Links
Note: This is an active development project implementing cutting-edge agent protocols. The API and features may change as the specifications evolve.
README copy captured when this server was indexed; it may lag the repository. The original is authoritative.