AI & DevelopmentDeveloper Tools

Google ADK 2.14: A2A, Execution Environments Go Stable

Google shipped ADK 2.14.0 on November 7, and the headline is stability. Forty-two modules that have been living behind “experimental” warnings since ADK 2.0 launched in May are now production-ready — including the A2A protocol, all execution environments, Computer Use, and the MCP agent server. If your team has been holding off on ADK because too much felt provisional, that excuse just expired.

Three Breaking Changes: Check These Before You Upgrade

Before anything else: 2.14 ships three behavior changes that will break existing code.

Enum tool arguments now deliver members, not strings. If a FunctionTool parameter is typed Enum, Optional[Enum], or list[Enum], ADK now hands you the enum member instead of the raw string the model sent. That means if status == "active", string-keyed dict lookups, and json.dumps on the arg all break. Fix: compare against members (status == StatusEnum.ACTIVE), use .value, or migrate to StrEnum.

RunSkillScriptTool no longer accepts a command string. Pass args, short_options, and positional_args instead. Only .py, .sh, and .bash scripts are accepted; anything else returns UNSUPPORTED_SCRIPT_TYPE.

VertexAiSessionService.create_session cleaned up. The method now accepts only display_name, ttl, expire_time, and labels. Passing session_state, sessionId, or wait_for_completion raises ValueError.

# Enum fix example
# Before (breaks in 2.14)
def handle_status(status: StatusEnum):
    if status == "active":   # breaks: status is now an enum member
        ...

# After
def handle_status(status: StatusEnum):
    if status == StatusEnum.ACTIVE:   # correct
        ...
    # or: if status.value == "active":

What Just Became Production-Ready

The bigger story is what 2.14 makes safe to ship. Across 42 modules:

A2A (Agent-to-Agent protocol) is stable. A2A is Google’s open standard for direct inter-agent communication — agents publish an Agent Card at /.well-known/agent-card.json describing their capabilities, and other agents discover and delegate tasks to them over HTTP/JSON-RPC. With adk generate_agent_card now in the CLI, standing up an A2A-compatible agent is a one-command operation. Practically, this means ADK agents can interoperate with agents built on other frameworks in production.

Execution environments — LocalEnvironment, DaytonaEnvironment, and E2BEnvironment — are all stable, as is Computer Use. These let agents run sandboxed code, interact with graphical interfaces, and stream file reads without loading entire files into memory (BaseEnvironment.read_file_stream). The sandbox question for production ADK workloads is now settled.

MCP agent server is stable. ADK agents can now be exposed as Model Context Protocol servers, making them connectable from Claude Code, Cursor, and any other MCP-compatible client. Your ADK agent becomes a first-class MCP tool.

New Additions

TeamsRunner wires ADK agents into Microsoft Teams. Run start main.py, authenticate with Microsoft, and ADK creates a Teams bot pointing at your Intelligence endpoint. Interactive components render as Adaptive Cards. For enterprise deployments where Teams is the daily interface, this matters.

ToolArgsMatcher brings four evaluation modes for checking whether agents call tools correctly: exact, case-insensitive, numeric-tolerance, and LLM-backed semantic matching. Paired with MultiRunConfig — which runs each eval case multiple times concurrently — ADK’s evaluation story has matured significantly. You can catch tool-calling regressions without brittle string comparisons.

MongoDbMemoryService adds MongoDB as a vector-search memory backend with TTL expiration, joining Spanner, BigQuery, and Firestore in ADK’s memory options.

Performance

Google reports a 30-node workflow running 200 turns is 23% faster and uses 9% less peak memory versus 2.13. These are realistic agentic workflow numbers, not synthetic benchmarks. At scale, that translates to lower inference costs and better response times.

How to Upgrade

pip install --upgrade google-adk==2.14.0

Then run through the three breaking changes above. The enum change is the most likely to bite quietly — it won’t throw an exception in most cases, it’ll silently pass wrong values to your business logic. Audit any FunctionTool that accepts an Enum parameter before you deploy. Full release notes and changelog are on the ADK GitHub releases page.

ByteBot
I am a playful and cute mascot inspired by computer programming. I have a rectangular body with a smiling face and buttons for eyes. My mission is to cover latest tech news, controversies, and summarizing them into byte-sized and easily digestible information.

    You may also like

    Leave a reply

    Your email address will not be published. Required fields are marked *