Memulai MCP, ADK, dan A2A

1. Ringkasan

Agen AI semakin populer dengan cepat, merevolusi otomatisasi tugas dan pengambilan keputusan dengan kemampuannya untuk beroperasi secara otonom, belajar, dan berinteraksi dengan lingkungannya untuk mencapai tujuan.

Namun, bagaimana sebenarnya cara membangun agen? Codelab ini akan membantu Anda memulai dengan menunjukkan cara membangun agen mata uang yang dapat mengonversi mata uang dari berbagai negara. Kemudian, Anda akan membuat agen biro perjalanan dan menghubungkannya ke agen mata uang. Tujuannya adalah untuk memandu Anda mempelajari teknologi terbaru untuk membantu Anda memahami akronim yang mungkin Anda lihat di internet (MCP, ADK, A2A) dan melihat cara kerjanya bersama-sama.

Arsitektur

Model Context Protocol (MCP)

Model Context Protocol (MCP) adalah protokol terbuka yang menstandarkan cara aplikasi memberikan konteks ke LLM. MCP menyediakan cara standar untuk menghubungkan model AI ke berbagai resource, perintah, dan alat.

Agent Development Kit (ADK)

Agent Development Kit (ADK) adalah framework orkestrasi fleksibel untuk mengembangkan dan men-deploy agen AI. ADK tidak bergantung model, tidak bergantung pada deployment, dan dibuat agar kompatibel dengan framework lain. ADK dirancang agar pengembangan agen terasa lebih seperti pengembangan software, sehingga memudahkan developer membuat, men-deploy, dan mengorkestrasi arsitektur agentic yang berkisar dari tugas sederhana hingga alur kerja yang kompleks.

Protokol Agent2Agent (A2A)

Protokol Agent2Agent (A2A) adalah standar terbuka yang dirancang untuk memungkinkan komunikasi dan kolaborasi yang lancar antar-agen AI. Sama seperti cara MCP menyediakan cara standar untuk memberi LLM akses ke data dan alat, A2A menyediakan cara standar bagi agen untuk berkomunikasi dengan agen lain. Di dunia di mana agen dibangun menggunakan beragam framework dan oleh berbagai vendor, A2A menyediakan bahasa umum, menghilangkan batasan, dan mendorong interoperabilitas.

Yang akan Anda pelajari

  • Cara membuat server MCP lokal
  • Men-deploy server MCP ke Cloud Run
  • Cara membangun Agen dengan Agent Development Kit yang menggunakan alat MCP
  • Cara mengekspos agen ADK sebagai Server A2A
  • Menguji Server A2A menggunakan Klien A2A
  • Cara membangun Agen untuk berkomunikasi dengan Agen lain melalui protokol A2A

Yang Anda butuhkan

  • Browser, seperti Chrome atau Firefox
  • Project Google Cloud yang mengaktifkan penagihan.

2. Sebelum memulai

Membuat project

Jika Anda belum memiliki project Google Cloud, buat project.

Di Konsol Google Cloud, di halaman pemilih project, pilih atau buat project Google Cloud.

Pastikan juga penagihan diaktifkan untuk project Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.

Mengaktifkan Cloud Shell

Google Cloud Shell adalah lingkungan pengembangan interaktif berbasis browser yang disediakan langsung dalam Konsol Google Cloud. Ini adalah cara termudah untuk mulai menggunakan Google Cloud tanpa perlu menginstal alat secara lokal.

Aktifkan Cloud Shell dengan mengklik link ini. Anda dapat beralih antara Terminal Cloud Shell (untuk menjalankan perintah cloud) dan Editor (untuk membangun project) dengan mengklik tombol yang sesuai dari Cloud Shell.

Setelah terhubung ke Cloud Shell, Anda dapat memeriksa bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke project ID Anda menggunakan perintah berikut:

gcloud auth list

Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda.

gcloud config list project

Gunakan perintah berikut untuk menyetel project Anda:

export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project $PROJECT_ID

Aktifkan Cloud API

Aktifkan API yang diperlukan menggunakan perintah berikut. Tindakan ini dapat memerlukan waktu beberapa menit.

gcloud services enable cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       run.googleapis.com \
                       cloudbuild.googleapis.com \
                       artifactregistry.googleapis.com \
                       aiplatform.googleapis.com \
                       compute.googleapis.com

Lihat dokumentasi untuk mempelajari perintah gcloud dan penggunaannya.

Mendapatkan kode

Buat clone repositori:

git clone https://github.com/jackwotherspoon/currency-agent.git
cd currency-agent

uv digunakan untuk mengelola dependensi dan sudah diinstal di Cloud Shell, tetapi jika menjalankan codelab secara lokal, Anda dapat menginstalnya sebagai berikut:

# macOS and Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows (uncomment below line)
# powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Konfigurasi variabel lingkungan dengan file .env dengan menjalankan perintah berikut:

echo "GOOGLE_GENAI_USE_ENTERPRISE=TRUE" >> .env \
&& echo "GOOGLE_CLOUD_PROJECT=$PROJECT_ID" >> .env \
&& echo "GOOGLE_CLOUD_LOCATION=global" >> .env

3. Membuat Server MCP lokal

Sebelum mengatur agen mata uang, Anda harus membuat server MCP terlebih dahulu untuk mengekspos alat yang akan dibutuhkan agen Anda.

Server MCP memungkinkan Anda menulis program ringan untuk mengekspos kemampuan tertentu (seperti mengambil nilai tukar mata uang) sebagai alat. Agen atau bahkan beberapa agen kemudian dapat mengakses alat ini menggunakan Model Context Protocol (MCP) standar.

Paket Python FastMCP dapat dimanfaatkan untuk membuat server MCP yang mengekspos satu alat bernama get_exchange_rate. Alat get_exchange_rate melakukan panggilan melalui internet ke Frankfurter API untuk mendapatkan nilai tukar saat ini antara dua mata uang.

Kode untuk server MCP dapat ditemukan di file mcp-server/server.py:

import logging
import os

import httpx
from fastmcp import FastMCP

# Set up logging
logger = logging.getLogger(__name__)
logging.basicConfig(format="[%(levelname)s]: %(message)s", level=logging.INFO)

mcp = FastMCP("Currency MCP Server 💵")

@mcp.tool()
def get_exchange_rate(
    currency_from: str = 'USD',
    currency_to: str = 'EUR',
    currency_date: str = 'latest',
):
    """Use this to get current exchange rate.

    Args:
        currency_from: The currency to convert from (e.g., "USD").
        currency_to: The currency to convert to (e.g., "EUR").
        currency_date: The date for the exchange rate or "latest". Defaults to "latest".

    Returns:
        A dictionary containing the exchange rate data, or an error message if the request fails.
    """
    logger.info(f"--- 🛠️ Tool: get_exchange_rate called for converting {currency_from} to {currency_to} ---")
    try:
        response = httpx.get(
            f'https://api.frankfurter.app/{currency_date}',
            params={'from': currency_from, 'to': currency_to},
        )
        response.raise_for_status()

        data = response.json()
        if 'rates' not in data:
            return {'error': 'Invalid API response format.'}
        logger.info(f'✅ API response: {data}')
        return data
    except httpx.HTTPError as e:
        return {'error': f'API request failed: {e}'}
    except ValueError:
        return {'error': 'Invalid JSON response from API.'}

if __name__ == "__main__":
    logger.info(f"🚀 MCP server started on port {os.getenv('PORT', 8080)}")
    # Could also use 'sse' transport, host="0.0.0.0" required for Cloud Run.
    asyncio.run(
        mcp.run_async(
            transport="http",
            host="0.0.0.0",
            port=os.getenv("PORT", 8080),
        )
    )

Untuk memulai server MCP secara lokal, buka terminal dan jalankan perintah berikut (server akan dimulai di http://localhost:8080):

uv run mcp-server/server.py

Uji apakah server MCP berfungsi dengan baik dan alat get_exchange_rate dapat diakses menggunakan Model Context Protocol.

Di jendela terminal baru (agar Anda tidak menghentikan server MCP lokal), jalankan perintah berikut:

uv run mcp-server/test_server.py

Anda akan melihat nilai tukar saat ini dari 1 USD (dolar AS) ke EUR (Euro):

--- 🛠️ Tool found: get_exchange_rate ---
--- 🪛 Calling get_exchange_rate tool for USD to EUR ---
---  Success: {
  "amount": 1.0,
  "base": "USD",
  "date": "2025-05-26",
  "rates": {
    "EUR": 0.87866
  }
} ---

Keren! Anda berhasil memiliki server MCP yang berfungsi dengan alat yang dapat diakses oleh agen Anda.

Sebelum melanjutkan ke stasiun berikutnya, hentikan server MCP yang berjalan secara lokal dengan menjalankan Ctrl+C (atau Command+C di Mac) di terminal tempat Anda memulainya.

4. Men-deploy Server MCP ke Cloud Run

Sekarang Anda siap men-deploy server MCP sebagai server MCP jarak jauh ke Cloud Run 🚀☁️

Manfaat menjalankan server MCP dari jarak jauh

Menjalankan server MCP dari jarak jauh di Cloud Run dapat memberikan beberapa manfaat:

  • 📈Skalabilitas: Cloud Run dibuat untuk meningkatkan kapasitas dengan cepat untuk menangani semua permintaan yang masuk. Cloud Run akan menskalakan server MCP Anda secara otomatis berdasarkan permintaan.
  • 👥Server terpusat: Anda dapat membagikan akses ke server MCP terpusat dengan anggota tim melalui hak istimewa IAM, sehingga mereka dapat terhubung ke server tersebut dari mesin lokal mereka, bukan menjalankan server mereka sendiri secara lokal. Jika perubahan dilakukan pada server MCP, semua anggota tim akan mendapatkan manfaatnya.
  • 🔐Keamanan: Cloud Run menyediakan cara mudah untuk mewajibkan permintaan yang diautentikasi. Hal ini memungkinkan hanya koneksi aman ke server MCP Anda, sehingga mencegah akses yang tidak sah.

Ubah ke direktori mcp-server:

cd mcp-server

Men-deploy server MCP ke Cloud Run:

gcloud run deploy mcp-server --no-allow-unauthenticated --region=us-central1 --source .

Jika layanan Anda berhasil di-deploy, Anda akan melihat pesan seperti berikut:

Service [mcp-server] revision [mcp-server-12345-abc] has been deployed and is serving 100 percent of traffic.

Mengautentikasi Klien MCP

Karena Anda menentukan --no-allow-unauthenticated untuk mewajibkan autentikasi, setiap klien MCP yang terhubung ke server MCP jarak jauh akan perlu melakukan autentikasi.

Dokumen resmi untuk Menghosting server MCP di Cloud Run memberikan informasi selengkapnya tentang topik ini, bergantung pada tempat Anda menjalankan klien MCP.

Anda harus menjalankan proxy Cloud Run untuk membuat tunnel terautentikasi ke server MCP jarak jauh di mesin lokal Anda.

Secara default, URL layanan Cloud Run mengharuskan semua permintaan diotorisasi dengan peran IAM Cloud Run Invoker (roles/run.invoker). Binding kebijakan IAM ini memastikan bahwa mekanisme keamanan yang kuat digunakan untuk mengautentikasi klien MCP lokal Anda.

Anda harus memastikan bahwa Anda atau anggota tim yang mencoba mengakses server MCP jarak jauh memiliki peran IAM roles/run.invoker yang terikat ke pokok IAM (akun Google Cloud) mereka.

gcloud run services proxy mcp-server --region=us-central1

Anda akan melihat output berikut:

Proxying to Cloud Run service [mcp-server] in project [<YOUR_PROJECT_ID>] region [us-central1]
http://127.0.0.1:8080 proxies to https://mcp-server-abcdefgh-uc.a.run.app

Semua traffic ke http://127.0.0.1:8080 kini akan diautentikasi dan diteruskan ke server MCP jarak jauh.

Menguji server MCP jarak jauh

Di terminal baru, kembali ke folder root dan jalankan ulang file mcp-server/test_server.py untuk memastikan server MCP jarak jauh berfungsi.

cd ..
uv run mcp-server/test_server.py

Anda akan melihat output yang serupa seperti saat menjalankan server secara lokal:

--- 🛠️ Tool found: get_exchange_rate ---
--- 🪛 Calling get_exchange_rate tool for USD to EUR ---
---  Success: {
  "amount": 1.0,
  "base": "USD",
  "date": "2025-05-26",
  "rates": {
    "EUR": 0.87866
  }
} ---

Anda dapat membuat kueri log server MCP Cloud Run yang di-deploy jika ingin memverifikasi bahwa server jarak jauh memang dipanggil:

gcloud run services logs read mcp-server --region us-central1 --limit 5

Anda akan melihat output berikut di log:

2025-06-04 14:28:29,871 [INFO]: --- 🛠️ Tool: get_exchange_rate called for converting USD to EUR ---
2025-06-04 14:28:30,610 [INFO]: HTTP Request: GET https://api.frankfurter.app/latest?from=USD&to=EUR "HTTP/1.1 200 OK"
2025-06-04 14:28:30,611 [INFO]:  API response: {'amount': 1.0, 'base': 'USD', 'date': '2025-06-03', 'rates': {'EUR': 0.87827}}

Setelah memiliki server MCP jarak jauh, Anda dapat melanjutkan ke pembuatan agen. 🤖

5. Membuat Agen dengan ADK

Anda telah men-deploy server MCP, sekarang saatnya membuat agen mata uang menggunakan Agent Development Kit (ADK).

ADK membuat pembuatan agen menjadi sangat ringan dan memungkinkan agen terhubung ke server MCP dengan dukungan bawaan untuk Alat MCP. Agen mata uang akan mengakses alat get_exchange_rate menggunakan class MCPToolset ADK.

Kode untuk agen mata uang terletak di currency_agent/agent.py:

import logging
import os

from dotenv import load_dotenv
from google.adk.agents import LlmAgent
from google.adk.a2a.utils.agent_to_a2a import to_a2a
from google.adk.tools.mcp_tool import MCPToolset, StreamableHTTPConnectionParams

logger = logging.getLogger(__name__)
logging.basicConfig(format="[%(levelname)s]: %(message)s", level=logging.INFO)

load_dotenv()

SYSTEM_INSTRUCTION = (
    "You are a specialized assistant for currency conversions. "
    "Your sole purpose is to use the 'get_exchange_rate' tool to answer questions about currency exchange rates. "
    "If the user asks about anything other than currency conversion or exchange rates, "
    "politely state that you cannot help with that topic and can only assist with currency-related queries. "
    "Do not attempt to answer unrelated questions or use tools for other purposes."
)

logger.info("--- 🔧 Loading MCP tools from MCP Server... ---")
logger.info("--- 🤖 Creating ADK Currency Agent... ---")

root_agent = LlmAgent(
    model="gemini-3.7-flash",
    name="currency_agent",
    description="An agent that can help with currency conversions",
    instruction=SYSTEM_INSTRUCTION,
    tools=[
        MCPToolset(
            connection_params=StreamableHTTPConnectionParams(
                url=os.getenv("MCP_SERVER_URL", "http://localhost:8080/mcp")
            )
        )
    ],
)

Untuk menguji agen mata uang dengan cepat, Anda dapat memanfaatkan UI dev ADK, yang diakses dengan menjalankan adk web:

uv run adk web --allow_origins "regex:https://.*\.cloudshell\.dev"

Di browser, buka http://localhost:8000 untuk melihat dan menguji agen.

Pastikan currency_agent dipilih sebagai agen di pojok kiri atas UI web.

UI Web ADK

Tanyakan kepada agen di area chat, misalnya "Berapa nilai 250 CAD dalam USD?". Anda akan melihat agen memanggil alat MCP get_exchange_rate kami sebelum memberikan respons.

Agen Mata Uang Web ADK

Agen berfungsi! Dapat menangani kueri yang berkaitan dengan konversi mata uang 💸.

6. Protokol Agent2Agent (A2A)

Protokol Agent2Agent (A2A) adalah standar terbuka yang dirancang untuk memungkinkan komunikasi dan kolaborasi yang lancar antar-agen AI. Hal ini memungkinkan agen yang dibangun menggunakan berbagai framework dan oleh vendor yang berbeda, untuk berkomunikasi satu sama lain dalam bahasa yang sama, sehingga menghilangkan batasan dan meningkatkan interoperabilitas.

A2A Protocol

A2A memungkinkan agen untuk:

  • Menemukan: Temukan agen lain dan pelajari keterampilan (AgentSkill) dan kemampuan (AgentCapabilities) mereka menggunakan Kartu Agen standar.
  • Berkomunikasi: Bertukar pesan dan data dengan aman.
  • Berkolaborasi: Mendelegasikan tugas dan mengoordinasikan tindakan untuk mencapai tujuan yang kompleks.

Protokol A2A memfasilitasi komunikasi ini melalui mekanisme seperti "Kartu Agen" yang berfungsi sebagai kartu nama digital yang dapat digunakan agen untuk mengiklankan kapabilitas dan informasi koneksinya.

Kartu Agen A2A

Sekarang saatnya untuk mengekspos agen mata uang menggunakan A2A sehingga dapat dipanggil oleh agen dan klien lain.

A2A Python SDK

A2A Python SDK menyediakan model Pydantic untuk setiap resource yang disebutkan di atas; AgentSkill, AgentCapabilities, dan AgentCard. Hal ini menyediakan antarmuka untuk mempercepat pengembangan dan integrasi dengan protokol A2A.

AgentSkill adalah cara Anda mengiklankan kepada agen lain bahwa agen mata uang memiliki alat untuk get_exchange_rate:

# A2A Agent Skill definition
skill = AgentSkill(
    id='get_exchange_rate',
    name='Currency Exchange Rates Tool',
    description='Helps with exchange values between various currencies',
    tags=['currency conversion', 'currency exchange'],
    examples=['What is exchange rate between USD and GBP?'],
)

Kemudian, sebagai bagian dari AgentCard, keterampilan dan kemampuan agen akan dicantumkan bersama dengan detail tambahan seperti mode input dan output yang dapat ditangani agen:

# A2A Agent Card definition
agent_card = AgentCard(
    name='Currency Agent',
    description='Helps with exchange rates for currencies',
    url=f'http://{host}:{port}/',
    version='1.0.0',
    defaultInputModes=["text"],
    defaultOutputModes=["text"],
    capabilities=AgentCapabilities(streaming=True),
    skills=[skill],
)

Saatnya menyatukan semuanya dengan agen mata uang dan menunjukkan keunggulan A2A.

7. Mengekspos Agen Mata Uang sebagai Server A2A

ADK menyederhanakan proses pembuatan dan penghubungan agen menggunakan protokol A2A untuk Anda. Membuat agen ADK yang ada dapat diakses (mengekspos) sebagai server A2A dilakukan dengan fungsi to_a2a(root_agent) ADK (Lihat dokumentasi ADK untuk mengetahui detail selengkapnya).

Fungsi to_a2a mengonversi agen yang ada agar dapat bekerja dengan A2A, dan dapat mengeksposnya sebagai server melalui uvicorn. Artinya, Anda memiliki kontrol yang lebih ketat atas apa yang ingin Anda ekspos jika Anda berencana untuk memproduksi agen Anda. Fungsi to_a2a() secara otomatis membuat kartu agen berdasarkan kode agen Anda menggunakan A2A Python SDK di balik layar.

Dengan melihat isi file currency_agent/agent.py, Anda dapat melihat penggunaan to_a2a dan cara agen mata uang diekspos sebagai server A2A hanya dengan dua baris kode.

from google.adk.a2a.utils.agent_to_a2a import to_a2a
# ... see file for full code

# Make the agent A2A-compatible
a2a_app = to_a2a(root_agent, port=10000)

Untuk menjalankan server A2A, jalankan perintah berikut di terminal baru:

uv run uvicorn currency_agent.agent:a2a_app --host localhost --port 10000

Jika server berhasil dimulai, output akan terlihat seperti berikut yang menunjukkan bahwa server berjalan di port 10000:

[INFO]: --- 🔧 Loading MCP tools from MCP Server... ---
[INFO]: --- 🤖 Creating ADK Currency Agent... ---
INFO:     Started server process [45824]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://localhost:10000 (Press CTRL+C to quit)

Agen mata uang kini berhasil berjalan sebagai server A2A, dengan kemampuan untuk dipanggil oleh agen atau klien lain menggunakan protokol A2A.

Memastikan Agen Jarak Jauh Berjalan

Anda dapat memeriksa ulang bahwa agen Anda sudah aktif dan berjalan dengan membuka URL kartu agen untuk agen mata uang yang dibuat secara otomatis oleh fungsi to_a2a().

Di browser Anda, buka http://localhost:10000/.well-known/agent-card.json

Anda akan melihat kartu agen berikut:

{
  "capabilities": {

  },
  "defaultInputModes": [
    "text/plain"
  ],
  "defaultOutputModes": [
    "text/plain"
  ],
  "description": "An agent that can help with currency conversions",
  "name": "currency_agent",
  "preferredTransport": "JSONRPC",
  "protocolVersion": "0.3.0",
  "skills": [
    {
      "description": "An agent that can help with currency conversions I am a specialized assistant for currency conversions. my sole purpose is to use the 'get_exchange_rate' tool to answer questions about currency exchange rates. If the user asks about anything other than currency conversion or exchange rates, politely state that I cannot help with that topic and can only assist with currency-related queries. Do not attempt to answer unrelated questions or use tools for other purposes.",
      "id": "currency_agent",
      "name": "model",
      "tags": [
        "llm"
      ]
    },
    {
      "description": "Use this to get current exchange rate.\n\nArgs:\n    currency_from: The currency to convert from (e.g., \"USD\").\n    currency_to: The currency to convert to (e.g., \"EUR\").\n    currency_date: The date for the exchange rate or \"latest\". Defaults to \"latest\".\n\nReturns:\n    A dictionary containing the exchange rate data, or an error message if the request fails.",
      "id": "currency_agent-get_exchange_rate",
      "name": "get_exchange_rate",
      "tags": [
        "llm",
        "tools"
      ]
    }
  ],
  "supportsAuthenticatedExtendedCard": false,
  "url": "http://localhost:10000",
  "version": "0.0.1"
}

Menguji Server A2A

Sekarang Anda dapat menguji server dengan mengirimkan beberapa permintaan menggunakan A2A.

A2A Python SDK menyediakan class a2a.client.Client yang menyederhanakan hal ini untuk Anda.

File currency_agent/test_a2aclient.py berisi kode yang menunjukkan cara mengambil kartu agen dan mengirim pesan ke server A2A.

# ... see file for full code

async def get_agent_card():
    """Get the agent card."""
    print(f"🔄 Fetching the agent card at {AGENT_URL}")

    async with httpx.AsyncClient() as httpx_client:
        resolver = A2ACardResolver(
            httpx_client=httpx_client,
            base_url=AGENT_URL,
        )
        public_agent_card = await resolver.get_agent_card()
        print("✅ Successfully fetched the agent card")
    return public_agent_card


async def send_message(text_query: str) -> None:
    """
    Send a text query to the agent and print the response.
    """
    public_agent_card = await get_agent_card()

    print("🔄 Initializing a non-streaming client")
    config = ClientConfig(streaming=False)
    client = await create_client(agent=public_agent_card, client_config=config)

    message = new_text_message(text_query, role=Role.ROLE_USER)
    print("Sending request:")
    request = SendMessageRequest(message=message)
    print(request)

    print("Response:")
    async for chunk in client.send_message(request):
        print(chunk)
    await client.close()

Jalankan pengujian menggunakan perintah berikut:

uv run currency_agent/test_a2aclient.py

Jika berhasil, uji coba akan menghasilkan hal berikut:

🔄 Fetching the agent card at http://localhost:10000
 Successfully fetched the agent card
====================================================
                     AgentCard                      
====================================================
--- General ---
Name        : currency_agent
Description : An agent that can help with currency conversions
Version     : 0.0.1

--- Interfaces ---
  [0] http://localhost:10000  (JSONRPC 1.0)

--- Capabilities ---
Streaming           : False
Push notifications  : False
Extended agent card : False

--- I/O Modes ---
Input  : text/plain
Output : text/plain

--- Skills ---
----------------------------------------------------
  ID          : currency_agent
  Name        : model
  Description : An agent that can help with currency conversions
  Tags        : llm
----------------------------------------------------
  ID          : currency_agent-get_exchange_rate
  Name        : get_exchange_rate
  Description : Use this to get current exchange rate.
  Tags        : llm, tools
====================================================
🔄 Fetching the agent card at http://localhost:10000
 Successfully fetched the agent card
🔄 Initializing a non-streaming client
Sending request:
message {
  message_id: "5d190c88-336e-4a22-925d-e2af49cf4bad"
  role: ROLE_USER
  parts {
    text: "how much is 100 USD in GBP?"
  }
}

Response:
task {
  id: "e6f311bb-654a-477f-82a9-81c7a48f7b81"
  context_id: "672e351b-0ff3-4aed-a059-868b383c41a0"
  status {
    state: TASK_STATE_COMPLETED
    timestamp {
      seconds: 1787836031
      nanos: 994786000
    }
  }
  artifacts {
    artifact_id: "e0a05ac8-25c7-471c-a33c-1073fe48cbb8"
    parts {
      text: "100 USD is currently equal to approximately **73.37 GBP** (at an exchange rate of 1 USD = 0.73368 GBP)."
    }
  }
  ...

Berhasil! Anda telah berhasil menguji bahwa Anda dapat berkomunikasi dengan agen mata uang melalui A2A protocol dengan klien A2A. 🎉

Lihat repositori a2a-samples di GitHub untuk melihat contoh A2A lainnya.

8. Menggunakan Agen Mata Uang jarak jauh melalui A2A

Pada langkah sebelumnya, Anda menggunakan Klien A2A untuk berkomunikasi dengan Agen Mata Uang melalui A2A.

Pada langkah ini, mari kita lihat cara menggunakan Agen Mata Uang sebagai agen jarak jauh dari Agen Perjalanan lain.

Kode Agen Perjalanan ada di travel_agent/agent.py:

import logging
import os

from dotenv import load_dotenv
from google.adk.agents import LlmAgent
from google.adk.tools.agent_tool import AgentTool
from google.adk.agents.remote_a2a_agent import RemoteA2aAgent, AGENT_CARD_WELL_KNOWN_PATH

logger = logging.getLogger(__name__)
logging.basicConfig(format="[%(levelname)s]: %(message)s", level=logging.INFO)

load_dotenv()

SYSTEM_INSTRUCTION = (
    "You are a helpful travel assistant. You help users plan trips, recommend places, "
    "and answer travel-related questions. "
    "Whenever a user asks about currency exchange rates or money conversions, "
    "delegate the request to the 'currency_agent' sub-agent."
)

CURRENCY_AGENT_URL = os.getenv("CURRENCY_AGENT_URL", "http://localhost:10000")

logger.info(
    "--- 🔗 Connecting to Remote A2A Currency Agent at %s... ---",
    CURRENCY_AGENT_URL,
)

currency_remote_agent = RemoteA2aAgent(
    name="currency_agent",
    agent_card=f"{CURRENCY_AGENT_URL}{AGENT_CARD_WELL_KNOWN_PATH}",
    description="An agent that can help with currency conversions and exchange rates.",
)

logger.info("--- 🤖 Creating ADK Travel Agent... ---")

root_agent = LlmAgent(
    model="gemini-3.7-flash",
    name="travel_agent",
    description="A travel assistant that can help plan trips and convert currencies via the remote currency agent.",
    instruction=SYSTEM_INSTRUCTION,
    tools=[AgentTool(agent=currency_remote_agent)],
)

Perhatikan cara Agen Mata Uang diakses menggunakan RemoteA2aAgent.

Jalankan adk web untuk menguji Agen Perjalanan:

uv run adk web --allow_origins "regex:https://.*\.cloudshell\.dev"

Di browser, buka http://localhost:8000 untuk melihat dan menguji agen.

Pastikan travel_agent dipilih sebagai agen di pojok kiri atas UI web.

Tanyakan kepada agen di area chat, misalnya "Berapa nilai 250 CAD dalam USD?".

Anda akan melihat Agen Perjalanan memanggil currency_agent dari jarak jauh sebelum memberikan respons.

Agen Mata Uang Jarak Jauh Web ADK

Agen berfungsi! Agen ini dapat menangani kueri yang berkaitan dengan konversi mata uang 💸 dengan memanggil agen jarak jauh menggunakan A2A.

9. Selamat

Selamat! Anda telah berhasil membangun dan men-deploy server MCP jarak jauh, membuat agen mata uang menggunakan Agent Development Kit (ADK) yang terhubung ke alat menggunakan MCP, dan mengekspos agen Anda menggunakan protokol Agent2Agent (A2A). Kemudian, Anda membuat agen perjalanan untuk berbicara dengan agen mata uang dari jarak jauh menggunakan A2A.

Berikut adalah link ke dokumentasi kode lengkap.

Ingin men-deploy agen Anda? Agent Runtime Gemini Enterprise Agent Platform memberikan pengalaman terkelola untuk men-deploy agen AI ke produksi.

Yang telah kita bahas

  • Cara membuat server MCP lokal
  • Men-deploy server MCP ke Cloud Run
  • Cara membangun Agen dengan Agent Development Kit yang menggunakan alat MCP
  • Cara mengekspos agen ADK sebagai Server A2A
  • Menguji Server A2A menggunakan Klien A2A
  • Cara membangun Agen untuk berkomunikasi dengan Agen lain melalui protokol A2A

Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam lab ini, ikuti langkah-langkah berikut:

  1. Di Konsol Google Cloud, buka halaman Manage resources.
  2. Dalam daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Matikan untuk menghapus project.