Начало работы с MCP, ADK и A2A

1. Обзор

Искусственный интеллект стремительно набирает популярность, совершая революцию в автоматизации задач и принятии решений благодаря своей способности работать автономно, обучаться и взаимодействовать с окружающей средой для достижения целей.

Но как именно создать агента? Этот практический урок поможет вам начать, показав, как создать валютного агента, способного конвертировать валюты разных стран. Цель урока — ознакомить вас с новейшими технологиями и помочь понять аббревиатуры, которые вы могли встречать в интернете (MCP, ADK, A2A).

Архитектура

Протокол контекста модели (MCP)

Протокол контекста модели (MCP) — это открытый протокол, который стандартизирует способы предоставления приложениями контекста для моделей с низкой степенью свободы. MCP обеспечивает стандартизированный способ связи моделей ИИ с ресурсами, подсказками и инструментами.

Комплект для разработки агентов (ADK)

Agent Development Kit (ADK) — это гибкая платформа для оркестрации разработки и развертывания агентов искусственного интеллекта. ADK не зависит от модели, не зависит от способа развертывания и разработан для совместимости с другими платформами. ADK был разработан для того, чтобы разработка агентов больше походила на разработку программного обеспечения, упрощая разработчикам создание, развертывание и оркестрацию агентных архитектур, от простых задач до сложных рабочих процессов.

Протокол Agent2Agent (A2A)

Протокол Agent2Agent (A2A) — это открытый стандарт, разработанный для обеспечения бесперебойной связи и сотрудничества между агентами искусственного интеллекта. Подобно тому, как MCP предоставляет стандартизированный способ предоставления LLM доступа к данным и инструментам, A2A предоставляет стандартизированный способ общения агентов друг с другом! В мире, где агенты создаются с использованием различных фреймворков и разными поставщиками, A2A обеспечивает общий язык, разрушая барьеры и способствуя совместимости.

Что вы узнаете

  • Как создать локальный сервер MCP
  • Развертывание сервера MCP в Cloud Run
  • Как создать агента с помощью Agent Development Kit, использующего инструменты MCP.
  • Как сделать агент ADK доступным в качестве A2A-сервера
  • Тестирование A2A-сервера с помощью A2A-клиента

Что вам понадобится

  • Браузер, например Chrome или Firefox.
  • Проект Google Cloud с включенной функцией выставления счетов.

2. Прежде чем начать

Создать проект

  1. В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud.
  2. Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
  3. Активируйте Cloud Shell, перейдя по этой ссылке . Вы можете переключаться между терминалом Cloud Shell (для выполнения облачных команд) и редактором (для сборки проектов), нажав соответствующую кнопку в Cloud Shell.
  4. После подключения к Cloud Shell необходимо проверить, прошли ли вы аутентификацию и установлен ли идентификатор вашего проекта, используя следующую команду:
gcloud auth list
  1. Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте.
gcloud config list project
  1. Для настройки проекта используйте следующую команду:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project $PROJECT_ID
  1. Включите необходимые API, используя следующую команду. Это может занять несколько минут.
gcloud services enable cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       run.googleapis.com \
                       cloudbuild.googleapis.com \
                       artifactregistry.googleapis.com \
                       aiplatform.googleapis.com \
                       compute.googleapis.com
  1. Убедитесь, что у вас установлен Python 3.10 или более поздней версии.

Для получения информации о командах gcloud и их использовании обратитесь к документации .

3. Установка

  1. Клонируйте репозиторий:
git clone https://github.com/jackwotherspoon/currency-agent.git
cd currency-agent
  1. Установите uv (используется для управления зависимостями):
# 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"
  1. Настройте переменные среды (через файл .env ):

Создайте файл .env , выполнив следующую команду:

echo "GOOGLE_GENAI_USE_VERTEXAI=TRUE" >> .env \
&& echo "GOOGLE_CLOUD_PROJECT=$PROJECT_ID" >> .env \
&& echo "GOOGLE_CLOUD_LOCATION=us-central1" >> .env

4. Создайте локальный сервер MCP.

Прежде чем приступить к настройке вашего валютного агента, вам сначала нужно создать MCP-сервер, чтобы предоставить доступ к инструментам, необходимым вашему агенту.

Сервер MCP позволяет писать легковесные программы, предоставляющие доступ к определенным возможностям (например, к получению курсов валют) в качестве инструментов. Затем агент или даже несколько агентов могут получить доступ к этим инструментам, используя стандартизированный протокол контекста модели (MCP).

Пакет FastMCP для Python можно использовать для создания MCP-сервера, предоставляющего единый инструмент под названием get_exchange_rate . Инструмент get_exchange_rate отправляет запрос через интернет к API Frankfurter для получения текущего обменного курса между двумя валютами.

Код для MCP-сервера можно найти в файле 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),
        )
    )

Чтобы запустить сервер MCP локально, откройте терминал и выполните следующую команду (сервер запустится по адресу http://localhost:8080 ):

uv run mcp-server/server.py

Проверьте корректность работы сервера MCP и доступность инструмента get_exchange_rate с использованием протокола контекста модели (MCP).

В новом окне терминала (чтобы не останавливать локальный сервер MCP) выполните следующую команду:

uv run mcp-server/test_server.py

В результате вы должны увидеть текущий обменный курс 1 доллара США к евро:

--- 🛠️ 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
  }
} ---

Отлично! У вас успешно запущен сервер MCP с инструментом, к которому сможет получить доступ ваш агент.

Перед переходом к следующей станции остановите локально запущенный сервер MCP, нажав Ctrl+C (или Command+C на Mac) в терминале, где вы его запустили.

5. Разверните свой MCP-сервер в Cloud Run.

Теперь вы готовы развернуть сервер MCP в качестве удаленного сервера MCP в Cloud Run 🚀☁️

Преимущества удалённого запуска сервера MCP

Запуск сервера MCP удаленно в Cloud Run может предоставить ряд преимуществ:

  • 📈Масштабируемость : Cloud Run разработан для быстрого масштабирования и обработки всех входящих запросов . Cloud Run автоматически масштабирует ваш сервер MCP в зависимости от спроса.
  • 👥Централизованный сервер : Вы можете предоставить доступ к централизованному серверу MCP членам команды через права IAM, позволяя им подключаться к нему со своих локальных компьютеров, вместо того чтобы каждый запускал свой собственный сервер локально. Если на сервере MCP будут внесены изменения, все члены команды получат от этого выгоду.
  • 🔐Безопасность : Cloud Run предоставляет простой способ принудительной аутентификации запросов. Это позволяет устанавливать только защищенные соединения с вашим сервером MCP, предотвращая несанкционированный доступ.

Перейдите в каталог mcp-server :

cd mcp-server

Разверните сервер MCP в Cloud Run:

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

Если развертывание вашей службы прошло успешно, вы увидите сообщение примерно следующего вида:

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

Аутентификация клиентов MCP

Поскольку вы указали --no-allow-unauthenticated , требующий аутентификации, любому клиенту MCP, подключающемуся к удаленному серверу MCP, потребуется пройти аутентификацию.

В официальной документации по размещению серверов MCP в Cloud Run содержится более подробная информация по этой теме в зависимости от того, где вы запускаете клиент MCP.

Для создания аутентифицированного туннеля к удаленному серверу MCP на вашем локальном компьютере вам потребуется запустить прокси-сервер Cloud Run .

По умолчанию для URL-адресов сервисов Cloud Run требуется авторизация всех запросов с помощью роли IAM Cloud Run Invoker ( roles/run.invoker ). Эта привязка политики IAM гарантирует использование надежного механизма безопасности для аутентификации вашего локального клиента MCP.

Необходимо убедиться, что у вас или у любых членов команды, пытающихся получить доступ к удаленному серверу MCP, роль IAM roles/run.invoker привязана к их субъекту IAM (учетной записи Google Cloud).

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

Вы должны увидеть следующий результат:

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

Теперь весь трафик к http://127.0.0.1:8080 будет аутентифицирован и перенаправлен на удаленный сервер MCP.

Проверьте работу удаленного сервера MCP.

В новом терминале вернитесь в корневую папку и повторно запустите файл mcp-server/test_server.py чтобы убедиться, что удаленный MCP-сервер работает.

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

Вы должны увидеть результат, аналогичный тому, что вы видели при локальном запуске сервера:

--- 🛠️ 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
  }
} ---

Чтобы убедиться в том, что удаленный сервер действительно вызывался, вы можете запросить журналы развернутого сервера Cloud Run MCP:

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

В логах вы должны увидеть следующее:

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}}

Теперь, когда у вас есть удалённый сервер MCP, вы можете перейти к созданию агента! 🤖

6. Создайте агента с помощью комплекта разработки агентов (ADK).

У вас развернут сервер MCP, теперь пришло время создать агент валютного рынка с помощью комплекта разработки агентов (ADK) .

Недавно вышел стабильный релиз Agent Development Kit версии 1.0.0. Это событие означает, что Python ADK теперь готов к использованию в производственной среде, предлагая надежную и отказоустойчивую платформу для разработчиков, позволяющую уверенно создавать и развертывать свои агенты в реальных условиях.

ADK делает создание агентов чрезвычайно простым и позволяет им легко подключаться к серверам MCP со встроенной поддержкой инструментов MCP. Валютный агент будет получать доступ к инструменту get_exchange_rate , используя класс MCPToolset из ADK.

Код валютного агента находится в 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-2.5-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")
            )
        )
    ],
)

Для быстрого тестирования валютного агента вы можете воспользоваться пользовательским интерфейсом разработчика ADK, доступ к которому осуществляется путем запуска adk web :

uv run adk web

В браузере перейдите по адресу http://localhost:8000 чтобы увидеть и протестировать агента!

Убедитесь, что в верхнем левом углу веб-интерфейса в качестве агента выбрано значение currency_agent .

Веб-интерфейс ADK

В чате задайте своему агенту вопрос, например: «Что такое 250 CAD в USD?» . Вы увидите, как агент вызовет наш инструмент get_exchange_rate MCP, прежде чем выдаст ответ.

ADK Web Currency Agent

Агент работает! Он может обрабатывать запросы, связанные с конвертацией валют 💸.

7. Протокол Agent2Agent (A2A)

Протокол Agent2Agent (A2A) — это открытый стандарт, разработанный для обеспечения бесперебойной связи и сотрудничества между агентами искусственного интеллекта. Это позволяет агентам, созданным с использованием различных фреймворков и от разных поставщиков, общаться друг с другом на общем языке, устраняя разрозненность и способствуя совместимости.

Протокол A2A

A2A позволяет агентам:

  • Откройте для себя: находите других агентов и изучайте их навыки ( AgentSkill ) и возможности ( AgentCapabilities ), используя стандартизированные карточки агентов .
  • Общайтесь: обменивайтесь сообщениями и данными безопасно.
  • Сотрудничество: Делегируйте задачи и координируйте действия для достижения сложных целей.

Протокол A2A облегчает эту коммуникацию с помощью таких механизмов, как «карточки агентов», которые действуют как цифровые визитные карточки, которые агенты могут использовать для рекламы своих возможностей и информации о подключении.

Карта агента A2A

Теперь настало время сделать валютного агента доступным через A2A, чтобы другие агенты и клиенты могли его вызывать.

A2A Python SDK

A2A Python SDK предоставляет модели Pydantic для каждого из вышеупомянутых ресурсов: AgentSkill , AgentCapabilities и AgentCard . Это обеспечивает интерфейс для ускорения разработки и интеграции с протоколом A2A.

AgentSkill — это инструмент, с помощью которого вы сообщаете другим агентам, что у валютного агента есть инструмент для 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?'],
)

Затем в карточке AgentCard будет указан список навыков и возможностей агента, а также дополнительные сведения, такие как режимы ввода и вывода, которые может обрабатывать агент:

# 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],
)

Пришло время объединить все это с валютным агентом и продемонстрировать возможности A2A!

8. Предоставление доступа к серверу A2A агента валютного обмена

ADK упрощает процесс создания и подключения агентов с использованием протокола A2A. Предоставление доступного (доступного) A2A-сервера существующему агенту ADK осуществляется с помощью функции ADK to_a2a(root_agent) (подробную информацию см. в документации ADK ).

Функция to_a2a преобразует существующий агент для работы с A2A и позволяет предоставлять к нему доступ в качестве сервера через uvicorn . Это означает, что вы получаете более жесткий контроль над тем, что хотите предоставить, если планируете внедрить свой агент в производство. Функция to_a2a() автоматически генерирует карточку агента на основе вашего кода агента, используя встроенный Python SDK A2A .

Заглянув внутрь файла currency_agent/agent.py вы увидите использование to_a2a и то, как агент валютного рынка представлен в качестве A2A-сервера всего двумя строками кода!

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)

Для запуска A2A-сервера в новом окне терминала выполните следующую команду:

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

Если сервер запустится успешно, вывод будет выглядеть следующим образом, указывая на то, что он работает на порту 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)

Теперь валютный агент успешно работает в режиме A2A-сервера, и к нему могут обращаться другие агенты или клиенты, использующие протокол A2A!

Убедитесь, что удаленный агент запущен.

Вы можете убедиться в работоспособности своего агента, перейдя по URL-адресу карточки агента валют, автоматически сгенерированной функцией to_a2a() .

В браузере перейдите по адресу [http://localhost:10000/.well-known/agent.json]

Вы должны увидеть следующую карточку агента:

{
  "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"
}

Протестируйте A2A-сервер

Теперь вы можете протестировать сервер, отправив ему несколько запросов с помощью A2A!

В состав A2A Python SDK входит класс a2a.client.A2AClient , который упрощает этот процесс.

Файл currency_agent/test_client.py содержит код, который выполняет несколько различных тестовых случаев на сервере A2A.

# ... see file for full code

# Example test using A2AClient
async def run_single_turn_test(client: A2AClient) -> None:
    """Runs a single-turn non-streaming test."""

    send_message_payload = create_send_message_payload(text="how much is 100 USD in CAD?")
    request = SendMessageRequest(
        id=str(uuid4()), params=MessageSendParams(**send_message_payload)
    )

    print("--- ✉️  Single Turn Request ---")
    # Send Message
    response: SendMessageResponse = await client.send_message(request)
    print_json_response(response, "📥 Single Turn Request Response")
    if not isinstance(response.root, SendMessageSuccessResponse):
        print("received non-success response. Aborting get task ")
        return

    if not isinstance(response.root.result, Task):
        print("received non-task response. Aborting get task ")
        return

    task_id: str = response.root.result.id
    print("--- ❔ Query Task ---")
    # query the task
    get_request = GetTaskRequest(id=str(uuid4()), params=TaskQueryParams(id=task_id))
    get_response: GetTaskResponse = await client.get_task(get_request)
    print_json_response(get_response, "📥 Query Task Response")

# ----- Main Entrypoint (Create client --> Run tests) -----
async def main() -> None:
    """Main function to run the tests."""
    print(f'--- 🔄 Connecting to agent at {AGENT_URL}... ---')
    try:
        async with httpx.AsyncClient() as httpx_client:
            # Create a resolver to fetch the agent card
            resolver = A2ACardResolver(
                httpx_client=httpx_client,
                base_url=AGENT_URL,
            )
            agent_card = await resolver.get_agent_card()
            # Create a client to interact with the agent
            client = A2AClient(
                httpx_client=httpx_client,
                agent_card=agent_card,
            )
            print('--- ✅ Connection successful. ---')

            await run_single_turn_test(client)
            await run_multi_turn_test(client)

    except Exception as e:
        traceback.print_exc()
        print(f'--- ❌ An error occurred: {e} ---')
        print('Ensure the agent server is running.')

Запустите тесты, используя следующую команду:

uv run currency_agent/test_client.py

Успешный тестовый запуск приведет к следующим результатам:

--- 🔄 Connecting to agent at http://localhost:10000... ---
---  Connection successful. ---
--- ✉️ Single Turn Request ---
--- 📥 Single Turn Request Response ---
{"id":"3bc92d7b-d857-4e93-9ff0-b2fb865f6e35","jsonrpc":"2.0","result":{"artifacts":[{"artifactId":"35e89e14-b977-4397-a23b-92c84bc32379","parts":[{"kind":"text","text":"Based on the current exchange rate, 1 USD is equivalent to 1.3704 CAD. Therefore, 100 USD would be 137.04 CAD.\n"}]}],"contextId":"2d66f277-152c-46ef-881d-7fe32866e9f5","history":[{"contextId":"2d66f277-152c-46ef-881d-7fe32866e9f5","kind":"message","messageId":"59819269f7d04849b0bfca7d43ec073c","parts":[{"kind":"text","text":"how much is 100 USD in CAD?"}],"role":"user","taskId":"52ae2392-84f5-429a-a14b-8413d3d20d97"},{"contextId":"2d66f277-152c-46ef-881d-7fe32866e9f5","kind":"message","messageId":"286095c6-12c9-40cb-9596-a9676d570dbd","parts":[],"role":"agent","taskId":"52ae2392-84f5-429a-a14b-8413d3d20d97"}],"id":"52ae2392-84f5-429a-a14b-8413d3d20d97","kind":"task","status":{"state":"completed"}}}

// ...

--- 🚀 First turn completed, no further input required for this test case. ---

Работает! Вы успешно проверили возможность связи с валютным агентом через A2A-сервер! 🎉

Чтобы увидеть более сложные примеры использования, загляните в репозиторий a2a-samples на GitHub!

Хотите развернуть своего агента? Vertex AI Agent Engine предоставляет управляемый интерфейс для развертывания агентов ИИ в производственной среде!

9. Поздравляем!

Поздравляем! Вы успешно создали и развернули удаленный сервер MCP, разработали валютного агента с помощью Agent Development Kit (ADK), который подключается к инструментам, использующим MCP, и предоставили доступ к своему агенту через протокол Agent2Agent (A2A)! Теперь валютный агент доступен для взаимодействия с другими агентами любой платформы с использованием протокола A2A!

Вот ссылка на полную документацию по коду.

Что мы рассмотрели

  • Как создать локальный сервер MCP
  • Развертывание сервера MCP в Cloud Run
  • Как создать агента с помощью Agent Development Kit, использующего инструменты MCP.
  • Как сделать агент ADK доступным в качестве A2A-сервера
  • Тестирование A2A-сервера с помощью A2A-клиента

Уборка

Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, использованные в этой лабораторной работе, выполните следующие действия:

  1. В консоли Google Cloud перейдите на страницу «Управление ресурсами» .
  2. В списке проектов выберите проект, который хотите удалить, и нажмите кнопку «Удалить» .
  3. В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить» , чтобы удалить проект.