{"slug": "can-google-adk-talk-to-amazon-bedrock-agentcore-runtime-a-cross-cloud-a2a", "title": "Can Google ADK Talk to Amazon Bedrock AgentCore Runtime? A Cross-Cloud A2A Benchmark", "summary": "A developer built a cross-cloud currency agent that uses Strands Agents on Amazon Bedrock AgentCore Runtime to delegate tasks to a Google ADK agent on GCP Cloud Run via the A2A v1.0 protocol, cross-checking results against an MCP exchange-rate tool. The benchmark measures latency, reliability, and overhead of independent cross-cloud verification, comparing performance across AWS, Azure, and GCP. Initial integration failed due to an A2A protocol version mismatch between v0.3.0 and v1.0 with no automatic fallback.", "body_md": "This article provides a step-by-step guide to building and testing a cross-cloud currency agent. A coordinator built with **Strands Agents** and hosted on **Amazon Bedrock AgentCore Runtime** (in AWS `us-east-1`\n\n) discovers and delegates to a **Google ADK agent** (on GCP Cloud Run in `us-central1`\n\n) over **A2A v1.0**, cross-checks results against an **MCP exchange-rate tool**, and measures what independent cross-cloud verification costs in latency, reliability, and overhead.\n\nMost Agent-to-Agent (A2A) protocol demos stop at \"look, the HTTP 200 OK request succeeded.\" That is a smoke test, not an interoperability benchmark.\n\nThis project goes further: an Amazon Bedrock AgentCore-hosted Strands Agents coordinator discovers and delegates to a Google ADK agent running on GCP Cloud Run, comparing the results against a local MCP stdio exchange-rate tool backed by live Frankfurter daily reference rates.\n\nWe also compare the performance, developer experience, and wire compatibility directly against our previous benchmark run hosted on **Microsoft Foundry in Azure** (`gpt-5-mini`\n\n), giving us a true cross-cloud benchmark across AWS, Azure, and GCP.\n\nThe questions we answer with hard empirical data rather than vibes:\n\nThis builds directly on the currency agent from the previous articles in this series:\n\nThat agent — built with Google ADK, Gemini 2.5 Flash, and a FastMCP exchange-rate server backed by the free [Frankfurter API](https://www.frankfurter.dev/) — serves as the *remote verifier* in this project.\n\nThe new repository wraps the AgentCore coordinator and benchmark suite:\n\n```\nCLI / Boto3 Test Runner (AWS SigV4 Auth)\n       |\nBedrock AgentCore Runtime hosted agent       (AWS, us-east-1, Amazon Nova Micro)\nStrands Agents coordinator\n       |\n       +-- MCP stdio --> Frankfurter rates      (in-container stdio process)\n       |\n       +-- A2A v1.0 --> Cloud Run               (GCP, us-central1)\n                           |\n                        Google ADK agent        (gemini-2.5-flash)\n                           |\n                        MCP HTTP --> Frankfurter rates\n```\n\nThe coordinator answers every conversion request in three distinct evaluation modes:\n\n| Mode | What happens | Why it exists |\n|---|---|---|\n`mcp_only` |\nCoordinator calls the local MCP rate tool | Baseline single-agent performance |\n`a2a_only` |\nCoordinator delegates to the remote ADK agent over A2A v1.0 | Measure remote-agent behavior and network latency |\n`verified` |\nMCP result independently checked against remote ADK agent over A2A | Measuring the accuracy vs. overhead tradeoff |\n\nBoth sides read the same Frankfurter daily reference rates on purpose: when the two clouds disagree, that measures *protocol, model, and orchestration* behavior, not data-source skew.\n\nCurrency conversion is a terrible job for an LLM and a great job for Python's `Decimal`\n\n. The domain layer is completely framework-independent with Pydantic models. Numeric agreement is evaluated strictly in code via relative difference — no LLM is ever asked \"do these numbers look close to you?\":\n\n```\ndifference = abs(primary.converted_amount - verifier.converted_amount)\nrelative = difference / abs(primary.converted_amount)\nagreed = relative <= tolerance  # default 0.005 (0.5%)\n```\n\nThe failure policy is explicit rather than emergent:\n\n`unverified`\n\n.`\"verification unavailable\"`\n\nwarning.`validation`\n\n, `provider`\n\n, `authentication`\n\n, `transport`\n\n, `timeout`\n\n, `protocol`\n\n). Never fabricate a rate.Because \"which layer broke\" is a core research question, every adapter exception is normalized into exactly one typed failure at the boundary.\n\nThe first attempt to connect the AgentCore coordinator to the Google ADK currency agent died immediately on invocation:\n\n```\na2a.utils.errors.MethodNotFoundError: Method not found\n```\n\n**Root cause:** A protocol-version mismatch between A2A v0.3.0 and v1.0 with **no automatic fallback negotiation**.\n\n`a2a-sdk>=1.0`\n\n) calls the A2A v1.0 JSON-RPC method `SendMessage`\n\n.`a2a-sdk 0.3.x`\n\n) only expose the v0.3.0 method `message/send`\n\n.`protocolVersion: 0.3.0`\n\n— but attempted the v1.0 method anyway.Furthermore, ecosystem package pins were initially mutually exclusive:\n\n| Package |\n`a2a-sdk` Requirement |\nStatus |\n|---|---|---|\n`strands-agents 1.50.2` |\n`>=1.0.0,<2` |\nCompatible |\n`google-adk 2.1.0 – 2.4.0` |\n`>=0.3.4,<0.4` |\nIncompatible |\n`google-adk 2.5.0` |\n`>=0.3.4,<2` |\nCompatible ✅ |\n`a2ui-agent-sdk` (through 0.4.0) |\n`<0.4.0` |\nIncompatible ❌ |\n\n`google-adk 2.5.0`\n\nupdated its dependencies to support `a2a-sdk 1.x`\n\n. However, A2UI extensions currently pin the older v0.3.0 protocol. For this benchmark, A2UI was omitted so both AWS and GCP sides could operate on **A2A v1.0 ( a2a-sdk 1.1.2)**.\n\nDeploying the coordinator to Amazon Bedrock AgentCore Runtime involved navigating several fast-moving SDK and platform details observed during our build on 2026-07-28:\n\nAnthropic models (such as Claude 3.5 Sonnet) on Amazon Bedrock now require a one-time use-case submission (`PutUseCaseForModelAccess`\n\n) and an AWS Marketplace subscription agreement. To eliminate deployment friction and keep setup fully automated, we configured the coordinator to use **Amazon Nova Micro** (`us.amazon.nova-micro-v1:0`\n\n). Nova Micro required zero approval forms, supported native tool-calling flawlessly, and delivered sub-second model responses.\n\nOn newer Bedrock model releases, using bare model IDs (e.g. `amazon.nova-micro-v1:0`\n\n) throws an HTTP 400 `ValidationException`\n\nrequiring on-demand throughput configuration. Passing the regional **Inference Profile ID** (`us.amazon.nova-micro-v1:0`\n\n) resolved this requirement immediately.\n\nThe older Python `pip`\n\n-based starter toolkit (`agentcore configure`\n\n/ `agentcore launch`\n\n) was deprecated in June 2026. Deployment now uses the official `@aws/agentcore`\n\nnpm CLI (Node 20+, CDK-based).\n\n`app/CurrencyCoordinator/main.py`\n\n):\n\n``` python\nfrom bedrock_agentcore.runtime import BedrockAgentCoreApp\nfrom strands import Agent, tool\nfrom coordinator.hosted_tool import run_currency_benchmark\nfrom model.load import load_model\n\napp = BedrockAgentCoreApp()\ntools = [tool(run_currency_benchmark)]\n\n@app.entrypoint\nasync def invoke(payload, context):\n    session_id = getattr(context, \"session_id\", \"default-session\")\n    agent = get_or_create_agent(session_id)\n    prompt = payload.get(\"prompt\", payload.get(\"messages\", \"\"))\n    result = await agent.invoke_async(prompt)\n    return {\"result\": str(result)}\n\nif __name__ == \"__main__\":\n    app.run()\n```\n\nThe remote verifier container colocates two processes: the FastMCP Frankfurter server on localhost and the A2A app listening on `$PORT`\n\n. Gemini API keys are retrieved securely from GCP Secret Manager:\n\n```\ngcloud secrets create gemini-api-key --data-file=\"$HOME/gemini.key\"\ngcloud run deploy currency-adk-a2a \\\n  --source adk_agent --region us-central1 \\\n  --allow-unauthenticated --min-instances=0 --max-instances=2 \\\n  --set-secrets \"GOOGLE_API_KEY=gemini-api-key:latest\" \\\n  --set-env-vars \"MCP_SERVER_URL=http://127.0.0.1:8081/mcp,GENAI_MODEL=gemini-2.5-flash\"\n```\n\nSetting `--min-instances=0`\n\nensures zero infrastructure costs when idle, while the coordinator's timeout is set to 60 seconds to gracefully handle initial Cloud Run container cold starts.\n\nThe repository includes a complete local test suite that runs deterministically without credentials or cloud infrastructure:\n\n```\n# 1. Clone & install dependencies\ngit clone https://github.com/xbill9/bedrock-adk-a2a-currency\ncd bedrock-adk-a2a-currency\npip3 install --user -e \".[dev]\"\n\n# 2. Run unit and integration tests (deterministic fixtures)\npytest\n\n# 3. Test local CLI modes\ncurrency-benchmark 100 USD CAD EUR --mode mcp_only\ncurrency-benchmark 100 USD CAD EUR --mode verified --transport mcp-stdio\n\n# 4. Execute full evaluation matrix\ncurrency-evaluate --output /tmp/currency-results.jsonl --summary /tmp/currency-summary.json\n```\n\nTo deploy and test the hosted AgentCore coordinator:\n\n```\n./infra/sync_app.sh\nagentcore deploy -y\nagentcore invoke \"Convert 100 USD to EUR in verified mode.\"\n```\n\nWe executed the 38-case evaluation matrix across all three modes (114 evaluation runs per coordinator cloud). Here is how Amazon Bedrock AgentCore Runtime compares with Microsoft Foundry on Azure running the exact same benchmark harness:\n\n| Coordinator Platform | Coordinator Model | Verifier Agent (GCP) | Evaluation Mode | Success Rate | Median Latency | p95 Latency | Numeric Agreement Rate |\n|---|---|---|---|---|---|---|---|\nAmazon Bedrock AgentCore |\nAmazon Nova Micro | Google ADK (Gemini 2.5) | `mcp_only` |\n100% | 312 ms | 1.12 s | N/A |\nAmazon Bedrock AgentCore |\nAmazon Nova Micro | Google ADK (Gemini 2.5) | `a2a_only` |\n100% | 1.74 s | 4.89 s | N/A |\nAmazon Bedrock AgentCore |\nAmazon Nova Micro | Google ADK (Gemini 2.5) | `verified` |\n100% | 1.76 s | 4.21 s | 100% (0.0% diff) |\nMicrosoft Foundry (Azure) |\nGPT-5 mini | Google ADK (Gemini 2.5) | `mcp_only` |\n100% | 297 ms | 1.09 s | N/A |\nMicrosoft Foundry (Azure) |\nMicrosoft Agent Framework | Google ADK (Gemini 2.5) | `a2a_only` |\n100% | 1.69 s | 4.82 s | N/A |\nMicrosoft Foundry (Azure) |\nGPT-5 mini | Google ADK (Gemini 2.5) | `verified` |\n100% | 1.71 s | 4.15 s | 100% (0.0% diff) |\n\n`verified`\n\nmode latency (~1.76 s) is dominated by the remote A2A network round-trip, rather than paying the cumulative sum of both paths (~2.05 s).`gpt-5-mini`\n\non Azure Foundry in tool selection accuracy (100% success rate) while operating with lower per-token inference costs and requiring zero prerequisite marketplace onboarding forms.`AWS us-east-1`\n\n→ `GCP Cloud Run us-central1`\n\n) completed in ~12 seconds wall-clock time including Cloud Run container warm-up, with per-quote execution averaging ~3.9 s.`message/send`\n\n) and v1.0 (`SendMessage`\n\n) are wire-incompatible. If you see `MethodNotFoundError`\n\n, inspect the `a2a-sdk`\n\nversion on both client and server before debugging prompt logic.`us.amazon.nova-micro-v1:0`\n\n) to avoid on-demand throughput errors during hosted execution.`Decimal`\n\narithmetic for conversion logic eliminates LLM calculation errors entirely, ensuring agreement checks evaluate protocol and model transportation integrity rather than arithmetic capabilities.`mcp_only`\n\n(312 ms) is ideal for simple user queries, cross-cloud A2A verification adds independent failover and anomaly detection against compromised or stale tool endpoints for mission-critical operations.The complete benchmark codebase, deployment scripts, test suite, and raw evaluation datasets are available on GitHub:\n\nIf you are building multi-cloud agent systems using Amazon Bedrock AgentCore, Google ADK, or Microsoft Agent Framework, we welcome your feedback and benchmark contributions!", "url": "https://wpnews.pro/news/can-google-adk-talk-to-amazon-bedrock-agentcore-runtime-a-cross-cloud-a2a", "canonical_source": "https://dev.to/aws-builders/can-google-adk-talk-to-amazon-bedrock-agentcore-runtime-a-cross-cloud-a2a-benchmark-53cp", "published_at": "2026-07-28 18:52:04+00:00", "updated_at": "2026-07-28 19:04:14.311609+00:00", "lang": "en", "topics": ["artificial-intelligence", "ai-agents", "ai-infrastructure", "developer-tools"], "entities": ["Amazon Bedrock AgentCore Runtime", "Google ADK", "Strands Agents", "GCP Cloud Run", "Frankfurter API", "Microsoft Foundry", "Azure", "A2A"], "alternates": {"html": "https://wpnews.pro/news/can-google-adk-talk-to-amazon-bedrock-agentcore-runtime-a-cross-cloud-a2a", "markdown": "https://wpnews.pro/news/can-google-adk-talk-to-amazon-bedrock-agentcore-runtime-a-cross-cloud-a2a.md", "text": "https://wpnews.pro/news/can-google-adk-talk-to-amazon-bedrock-agentcore-runtime-a-cross-cloud-a2a.txt", "jsonld": "https://wpnews.pro/news/can-google-adk-talk-to-amazon-bedrock-agentcore-runtime-a-cross-cloud-a2a.jsonld"}}