Google ADK — The Open-Source Framework for Building Production AI Agents
Posted on: 5/7/2026 3:21:58 AM
Table of contents
- 1. What is Google ADK and Why Should You Care?
- 2. ADK Core Architecture
- 3. Multi-Agent Orchestration Patterns
- 4. Skills — On-Demand Expertise
- 5. Deployment and Evaluation
- 6. ADK vs Other AI Agent Frameworks
- 7. ADK in the Protocol Stack — MCP + A2A = Complete Ecosystem
- 8. Getting Started with ADK
- 9. Conclusion
As the AI Agent wave exploded throughout 2025–2026, every vendor and framework offered their own approach: LangChain/LangGraph for the Python community, Semantic Kernel for the .NET ecosystem, CrewAI for role-based agents. The common problem? Each framework manages context, tools, memory and orchestration differently — and they're virtually incompatible with each other. Google Agent Development Kit (ADK) launched in mid-2025 with a bigger ambition: not just another framework, but an open platform natively integrating both MCP (tool access) and A2A (agent-to-agent communication), supporting multiple languages (Python, TypeScript, Go, Java) and deploying from local to Google Cloud with a single command.
This article dives deep into ADK's architecture, agent type system, tool integration, context management and production patterns — the framework rapidly becoming the top choice for teams building enterprise multi-agent systems.
1. What is Google ADK and Why Should You Care?
Agent Development Kit (ADK) is Google's open-source framework for building, debugging and deploying AI agents at enterprise scale. Unlike frameworks focused on a single language or model, ADK is designed with a model-agnostic and protocol-native philosophy:
- Model-agnostic: Supports Gemini, Claude, Ollama, vLLM, LiteLLM — switch models with a single config line
- Protocol-native: Integrates MCP for tool/data access and A2A for agent-to-agent communication directly in the core, no third-party plugins needed
- Multi-language: Official SDKs for Python (
google-adk), TypeScript (@google/adk), Go (google.golang.org/adk), Java (com.google.adk:google-adk) - Deployment-ready: From local dev (Web UI, CLI, API Server) to Google Cloud (Agent Runtime, Cloud Run, GKE) without changing code
The Core Differentiator
Most current AI agent frameworks force you to choose between simple but limited (CrewAI) or flexible but complex (LangGraph). ADK follows a progressive disclosure approach — start with a few lines of code for a simple agent, gradually expand to multi-agent orchestration, graph-based workflows and production deployment without re-architecting.
2. ADK Core Architecture
ADK is built on four pillars: Agents (processing units), Tools (external interaction capabilities), Sessions (conversation context) and Memory (long-term knowledge). Each pillar is modular — you can replace any component with a custom implementation without affecting the rest.
graph TB
subgraph ADK["Google ADK Framework"]
direction TB
subgraph Agents["Agent Layer"]
LLM["LlmAgent
Reasoning + Tool calling"]
SEQ["SequentialAgent
Step-by-step execution"]
PAR["ParallelAgent
Concurrent execution"]
LOOP["LoopAgent
Iterate until done"]
CUSTOM["CustomAgent
Custom logic"]
end
subgraph Tools["Tool Layer"]
FT["FunctionTool
Python/TS/Go functions"]
MCPT["MCPTool
MCP Servers"]
A2AT["AgentTool
A2A Protocol"]
OAPI["OpenAPI Tool
REST APIs"]
GS["GoogleSearchTool"]
end
subgraph Context["Context Layer"]
SESS["Sessions
Conversation + State"]
MEM["Memory
Cross-session learning"]
ART["Artifacts
Large files & data"]
end
end
Agents --> Tools
Agents --> Context
style ADK fill:#f8f9fa,stroke:#e0e0e0,color:#2c3e50
style Agents fill:#fff,stroke:#e94560,color:#2c3e50
style Tools fill:#fff,stroke:#4CAF50,color:#2c3e50
style Context fill:#fff,stroke:#2196F3,color:#2c3e50
style LLM fill:#e94560,stroke:#fff,color:#fff
style SEQ fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style PAR fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style LOOP fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style CUSTOM fill:#f8f9fa,stroke:#e94560,color:#2c3e50
style FT fill:#f8f9fa,stroke:#4CAF50,color:#2c3e50
style MCPT fill:#4CAF50,stroke:#fff,color:#fff
style A2AT fill:#4CAF50,stroke:#fff,color:#fff
style OAPI fill:#f8f9fa,stroke:#4CAF50,color:#2c3e50
style GS fill:#f8f9fa,stroke:#4CAF50,color:#2c3e50
style SESS fill:#f8f9fa,stroke:#2196F3,color:#2c3e50
style MEM fill:#2196F3,stroke:#fff,color:#fff
style ART fill:#f8f9fa,stroke:#2196F3,color:#2c3e50
Figure 1: Google ADK's three-layer architecture — Agents, Tools and Context
2.1. Agent Type System
ADK provides five built-in agent types, each serving a different orchestration pattern:
| Agent Type | Description | When to Use |
|---|---|---|
| LlmAgent | Core agent using LLM for reasoning, tool calling and response generation. Has its own instructions, tools and model config. | Any task requiring natural language reasoning: answering questions, data analysis, code generation |
| SequentialAgent | Runs a list of sub-agents in order; each agent's output becomes the next agent's input. | Multi-step pipelines: extract → transform → validate → load |
| ParallelAgent | Runs multiple sub-agents concurrently, aggregating results when all complete. | Fan-out tasks: calling multiple APIs simultaneously, parallel search across sources |
| LoopAgent | Repeatedly runs a sub-agent until a stop condition is met (max iterations or escalation). | Refinement loops: self-review and fix code, iterative research, retry with feedback |
| CustomAgent | Completely override orchestration logic with your own agent loop. | When you need specialized orchestration logic the four types above cannot handle |
Composability is Key
ADK's greatest strength is that agent types are composable — they can nest within each other. A SequentialAgent can contain a ParallelAgent at step 2, where each branch is an LlmAgent with its own tools. This architecture lets you represent any complex workflow without custom code.
2.2. Tool System — MCP, A2A and Function Tools
ADK supports five tool types, with three particularly noteworthy:
FunctionTool — Turns any Python/TypeScript/Go/Java function into an agent-callable tool. ADK auto-generates JSON Schema from type annotations and docstrings, no manual schema writing needed:
from google.adk import Agent, FunctionTool
def get_weather(city: str, unit: str = "celsius") -> dict:
"""Get current weather for a city."""
return {"city": city, "temp": 28, "unit": unit}
agent = Agent(
model="gemini-2.5-flash",
name="weather_agent",
instructions="You are a weather assistant.",
tools=[FunctionTool(get_weather)]
)
MCPTool — Connects directly to any MCP Server (filesystem, database, GitHub, Slack...). Instead of writing wrappers for each API, agents use MCPTool to access hundreds of existing MCP servers in the ecosystem:
from google.adk.tools.mcp import MCPTool
# Connect to GitHub MCP server
github_tools = MCPTool.from_server(
command="npx",
args=["-y", "@modelcontextprotocol/server-github"],
env={"GITHUB_TOKEN": "ghp_xxx"}
)
AgentTool (A2A) — Allows agents to call other agents via the A2A protocol, even agents built with different frameworks (LangGraph, CrewAI, Semantic Kernel). This is what makes ADK unique — it doesn't lock you into a single ecosystem:
from google.adk.a2a import A2AClient
# Call an external pricing agent via A2A
pricing_client = A2AClient("https://pricing-agent.example.com")
result = await pricing_client.send_task(
"Check wholesale price for 500kg Robusta coffee"
)
graph LR
ADK_AGENT["ADK Agent
(Orchestrator)"]
ADK_AGENT -->|"FunctionTool"| LOCAL["Local Functions
Python/TS/Go"]
ADK_AGENT -->|"MCPTool"| MCP_S["MCP Servers
GitHub, DB, Slack..."]
ADK_AGENT -->|"AgentTool (A2A)"| EXT["External Agents
LangGraph, CrewAI..."]
ADK_AGENT -->|"OpenAPI Tool"| REST["REST APIs
Any endpoint"]
ADK_AGENT -->|"GoogleSearchTool"| SEARCH["Google Search
Real-time web data"]
style ADK_AGENT fill:#e94560,stroke:#fff,color:#fff
style LOCAL fill:#f8f9fa,stroke:#e0e0e0,color:#2c3e50
style MCP_S fill:#4CAF50,stroke:#fff,color:#fff
style EXT fill:#2196F3,stroke:#fff,color:#fff
style REST fill:#f8f9fa,stroke:#e0e0e0,color:#2c3e50
style SEARCH fill:#f8f9fa,stroke:#e0e0e0,color:#2c3e50
Figure 2: Five tool types in ADK — from local functions to remote agents via A2A
2.3. Session, Memory and Artifacts
ADK handles context across three distinct tiers:
Session — Represents an ongoing conversation. Each session contains message history, state (temporary key-value store) and an event list. ADK supports rewind (rollback to previous state) and migrate (transfer session to another agent) — extremely useful for handoff scenarios between specialized agents.
Memory — Long-term knowledge spanning multiple sessions. ADK allows configurable memory strategies (in-memory, file-based, or external store). Agents can learn from previous sessions without stuffing the entire history into the context window — solving the Context Rot problem many other frameworks face.
Artifacts — Manages large files and data (images, PDFs, datasets). Instead of stuffing binaries into context, ADK lazy-loads artifacts only when the agent actually needs them — saving tokens and keeping the context window clean.
Context is Not Unlimited
Although ADK automatically filters irrelevant events and summarizes old history, you still need to design agents with context budget in mind. An agent with 50 tools will consume thousands of tokens just for tool schemas. Rule of thumb: each agent should have only 5–10 direct tools, delegating the rest to specialized sub-agents.
3. Multi-Agent Orchestration Patterns
ADK's true power emerges when building systems with multiple coordinating agents. Here are the three most common production patterns:
3.1. Hierarchical Delegation
An orchestrator agent receives user requests, analyzes them and delegates to specialized agents. This pattern suits complex systems like customer support, code generation, or research:
graph TD
USER["User Request"] --> ORCH["Orchestrator Agent
(LlmAgent)"]
ORCH -->|"Technical question"| TECH["Tech Support Agent
Tools: docs, codebase"]
ORCH -->|"Orders/billing"| BILL["Billing Agent
Tools: payment API, CRM"]
ORCH -->|"Feedback/complaint"| FEED["Feedback Agent
Tools: ticket system"]
TECH --> RESP["Aggregated Response"]
BILL --> RESP
FEED --> RESP
RESP --> USER
style USER fill:#f8f9fa,stroke:#e0e0e0,color:#2c3e50
style ORCH fill:#e94560,stroke:#fff,color:#fff
style TECH fill:#2c3e50,stroke:#fff,color:#fff
style BILL fill:#2c3e50,stroke:#fff,color:#fff
style FEED fill:#2c3e50,stroke:#fff,color:#fff
style RESP fill:#4CAF50,stroke:#fff,color:#fff
Figure 3: Hierarchical Delegation — orchestrator distributes work to specialized agents
3.2. Pipeline (Sequential)
Data flows through a chain of agents, each processing and enriching before passing forward. Example content creation pipeline:
from google.adk import Agent, SequentialAgent
researcher = Agent(name="researcher", model="gemini-2.5-pro",
instructions="Research the topic and gather facts.",
tools=[google_search, web_scraper])
writer = Agent(name="writer", model="gemini-2.5-flash",
instructions="Write an article from research notes.",
tools=[])
reviewer = Agent(name="reviewer", model="gemini-2.5-pro",
instructions="Review the article, suggest improvements.",
tools=[])
pipeline = SequentialAgent(
name="content_pipeline",
sub_agents=[researcher, writer, reviewer]
)
3.3. Fan-out / Fan-in (Parallel)
When you need to gather information from multiple sources simultaneously — calling multiple APIs, searching across databases, or analyzing documents in parallel:
from google.adk import Agent, ParallelAgent
price_checker = Agent(name="price_checker", ...)
review_analyzer = Agent(name="review_analyzer", ...)
inventory_checker = Agent(name="inventory_checker", ...)
market_research = ParallelAgent(
name="market_research",
sub_agents=[price_checker, review_analyzer, inventory_checker]
)
# Three agents run concurrently, results aggregated when all complete
4. Skills — On-Demand Expertise
One of ADK's most distinctive features is SkillToolset — an on-demand expertise loading system using a progressive disclosure model across three tiers, reducing baseline token usage by approximately 90% per agent.
| Tier | Content | Size | When Loaded |
|---|---|---|---|
| L1 — Metadata | Skill name + short description | ~100 tokens/skill | Always (startup) |
| L2 — Instructions | Detailed step-by-step guidance | <5,000 tokens | When agent activates the skill |
| L3 — Resources | Style guides, API specs, reference docs | Unlimited | When instructions require them |
SkillToolset automatically creates three tools for the agent: list_skills (browse L1 menu), load_skill (load L2 instructions) and load_skill_resource (load L3 reference docs). The agent decides when it needs which skill — no hard-coded logic required.
Skills follow the agentskills.io specification — the same format supported by Gemini CLI, Claude Code, Cursor and 40+ other products. This means skills you write for ADK can be reused in other tools without modification:
# skills/seo-checker/SKILL.md
---
name: seo-checker
description: Check and suggest SEO optimizations for blog posts
---
## Instructions
1. Read the article content from context
2. Check: title length, meta description, heading hierarchy, internal links
3. Score SEO from 0-100
4. Suggest specific improvements for each failing criterion
Skill Factory — Agents Creating New Skills
ADK allows creating meta-skills — a skill that teaches the agent how to create new skills. The agent can generate spec-compliant SKILL.md files at runtime, then load and use them immediately. This is an extremely powerful pattern for systems that need to continuously expand capabilities without redeploying code.
5. Deployment and Evaluation
5.1. Deployment Options
ADK supports deployment at multiple levels, from development to enterprise production:
Local Development: ADK includes a Web UI (visual debugging interface), CLI chat interface and API Server for integration. The Web UI lets you inspect each reasoning step, view tool calls, state changes and token usage — invaluable during development.
Google Cloud — Agent Runtime: Deploy with a single command; agents automatically receive managed infrastructure, built-in authentication, Cloud Trace observability and enterprise-grade security. No code changes needed compared to the local version.
Containerized (Cloud Run / GKE): Package agents as Docker containers and deploy to Cloud Run (serverless, auto-scaling) or GKE (Kubernetes, maximum control). This pattern suits teams with existing CI/CD pipelines.
Ambient Agents: A new ADK pattern — agents running in the background, listening to events (webhooks, message queues, cron) and reacting automatically. Example: an agent monitoring a Slack channel, auto-detecting and answering technical questions when tagged.
5.2. Evaluation Framework
ADK integrates an evaluation framework for testing agents before production deployment:
- Custom Criteria: Define custom evaluation criteria (accuracy, relevance, format compliance...)
- User Simulation: Create synthetic users to test conversation flows
- Environment Simulation: Mock external services for deterministic testing
- Metrics Dashboard: Token usage, latency, success rate, tool call patterns
6. ADK vs Other AI Agent Frameworks
| Criteria | Google ADK | LangGraph | CrewAI | Semantic Kernel |
|---|---|---|---|---|
| Languages | Python, TS, Go, Java | Python, JS | Python | C#, Python, Java |
| Model support | Gemini, Claude, Ollama, vLLM, LiteLLM | OpenAI, Anthropic, Google via LangChain | OpenAI, Anthropic, local | OpenAI, Azure, Gemini, local |
| MCP integration | Native (MCPTool) | Via adapter | Via plugin | Native (from v1.x) |
| A2A support | Native (AgentTool) | Via adapter | Via adapter | Via adapter |
| Orchestration | Sequential, Parallel, Loop, Graph, Custom | Graph-based (strong) | Role-based crew | Planner-based |
| Managed deployment | Google Cloud Agent Runtime | LangSmith Cloud | CrewAI Enterprise | Azure AI Agent Service |
| Skills system | SkillToolset (agentskills.io) | No | No | Plugins |
| Evaluation | Built-in | LangSmith | Basic | Not built-in |
7. ADK in the Protocol Stack — MCP + A2A = Complete Ecosystem
One of the key reasons ADK stands out is how it integrates both standard protocols of the AI Agent ecosystem:
graph TB
subgraph Stack["Protocol Stack for AI Agents"]
direction TB
A2A_L["A2A Protocol
Agent ↔ Agent Communication"]
MCP_L["MCP Protocol
Agent ↔ Tool/Data Access"]
ADK_L["Google ADK
Agent Framework + Orchestration"]
INFRA["Infrastructure
Cloud Run · GKE · Local"]
end
A2A_L --> ADK_L
MCP_L --> ADK_L
ADK_L --> INFRA
style Stack fill:#f8f9fa,stroke:#e0e0e0,color:#2c3e50
style A2A_L fill:#2196F3,stroke:#fff,color:#fff
style MCP_L fill:#4CAF50,stroke:#fff,color:#fff
style ADK_L fill:#e94560,stroke:#fff,color:#fff
style INFRA fill:#2c3e50,stroke:#fff,color:#fff
Figure 4: Protocol stack — ADK is the orchestration layer connecting MCP (tool access) and A2A (agent communication)
MCP solves "how do agents access tools/data" — a single connection standard for hundreds of data sources (databases, file systems, APIs, SaaS tools). A2A solves "how do agents talk to other agents" — enabling agents from different frameworks and vendors to discover, delegate tasks and coordinate work. ADK is the orchestration layer in between, turning both protocols into tools any agent can use immediately.
Real-World Example: Hiring Pipeline
An ADK orchestrator receives "Find Senior Backend Engineer candidates." It uses MCPTool to access the internal HR database and job spec. Then calls AgentTool (A2A) to a sourcing agent (possibly built with LangGraph) to search LinkedIn. When candidates are found, it calls a scheduling agent (built with Semantic Kernel) via A2A to book interviews — all orchestrated by ADK without requiring agents to speak the same framework "language."
8. Getting Started with ADK
Installation and running your first agent takes just a few minutes:
# Install ADK
pip install google-adk
# Create a new project
adk init my-first-agent
cd my-first-agent
# Launch Web UI for debugging
adk web
# Or chat directly via CLI
adk chat
Sample agent.py for a simple agent:
from google.adk import Agent
def search_products(query: str, max_results: int = 5) -> list:
"""Search products by keyword."""
# Actual search logic here
return [{"name": f"Product {i}", "price": 100 + i * 10} for i in range(max_results)]
root_agent = Agent(
model="gemini-2.5-flash",
name="shopping_assistant",
instructions="""You are a smart shopping assistant.
Help customers find products matching their needs and budget.""",
tools=[search_products]
)
Deploy to Cloud Run:
# Single command for production deployment
adk deploy cloud-run \
--project my-gcp-project \
--region asia-southeast1 \
--service-name shopping-agent
9. Conclusion
Google ADK isn't the only AI Agent framework, but it is the first to natively integrate both MCP and A2A, support multiple languages, and provide a seamless deployment path from local to cloud. Its progressive disclosure philosophy — simple for single agents, expandable to complex multi-agent orchestration without re-architecting — makes ADK suitable for both rapid prototyping and enterprise production systems.
With support from over 150 organizations in the A2A ecosystem, multi-language SDKs, and a Skills system following the agentskills.io standard, ADK is shaping how we build and deploy AI Agents in the second half of 2026 and beyond.
References
- Google ADK — Official Documentation
- ADK Python SDK — GitHub Repository
- Developer's Guide to Building ADK Agents with Skills — Google Developers Blog
- A2A Protocol — Official Specification
- Developer's Guide to AI Agent Protocols — Google Developers Blog
- A2A Protocol Upgrade Announcement — Google Cloud Blog
AI Agent Evaluation — Testing and Scoring AI Agents in Production
AlphaEvolve — The AI Agent That Discovers Algorithms Beyond Human Capability
Disclaimer: The opinions expressed in this blog are solely my own and do not reflect the views or opinions of my employer or any affiliated organizations. The content provided is for informational and educational purposes only and should not be taken as professional advice. While I strive to provide accurate and up-to-date information, I make no warranties or guarantees about the completeness, reliability, or accuracy of the content. Readers are encouraged to verify the information and seek independent advice as needed. I disclaim any liability for decisions or actions taken based on the content of this blog.