1. Введение
В этом практическом занятии вы научитесь создавать и развертывать сервер протокола контекста модели (MCP) для расширения возможностей Gemini CLI. Вы будете создавать godoctor — сервер на основе Go, предоставляющий пользовательские инструменты для разработки на Go, превращая Gemini CLI из универсального помощника в специализированного эксперта по разработке на Go.
В этом практическом занятии используется подход, основанный на подсказках. Вы будете выступать в роли технического руководителя, предоставляя подсказки своему ИИ-помощнику (Gemini CLI). Ваша цель — научиться переводить требования проекта в эффективные подсказки и позволить ИИ заниматься деталями реализации.
В основе этого проекта лежит протокол контекста модели (MCP). MCP — это протокол с открытым исходным кодом, который стандартизирует способы взаимодействия больших языковых моделей (LLM), таких как Gemini, с внешними инструментами и сервисами. Он выступает в качестве моста, позволяя ИИ получать доступ к информации из реального мира и выполнять действия, выходящие за рамки его встроенных знаний. Создавая MCP-сервер, вы создаете пользовательский плагин, который Gemini CLI может обнаружить и использовать, эффективно обучая его новым навыкам.
Что вы узнаете
- Как установить и настроить Gemini CLI
- Как сформулировать эффективные подсказки для руководства ИИ-помощником в процессе разработки программного обеспечения
- Как предоставить контекст и рекомендации ИИ-помощнику
- Как создать и настроить сервер MCP для расширения возможностей Gemini CLI.
- Как контейнеризировать и развернуть приложение Go в Google Cloud Run
Что вам понадобится
Этот мастер-класс можно пройти полностью в среде Google Cloud Shell , в которой уже предустановлены все необходимые зависимости (gcloud CLI, Go, Docker, Gemini CLI).
В качестве альтернативы , если вы предпочитаете работать на собственном компьютере, вам потребуется следующее:
- Node.js 20 или более поздняя версия
- Установлен и инициализирован Google Cloud SDK (gcloud CLI).
- На вашей системе должна быть установлена версия Go 1.24 или более поздняя.
- Docker установлен в вашей системе.
Ключевые технологии
Здесь вы найдете более подробную информацию о технологиях, которые мы будем использовать:
- Gemini CLI : Интерфейс командной строки на основе искусственного интеллекта, который мы будем расширять.
- Протокол контекста модели (MCP) : протокол с открытым исходным кодом, позволяющий Gemini CLI взаимодействовать с нашим пользовательским инструментом.
- Go SDK для MCP : библиотека Go, которую мы будем использовать для реализации нашего MCP-сервера.
Советы для успешного проведения Codelab
Работа с ИИ-помощником — это новый подход к разработке программного обеспечения. Вот несколько советов, которые помогут вам сделать этот опыт комфортным и успешным:
- Не бойтесь нажимать ESC. Искусственный интеллект иногда будет предлагать действия или код, с которыми вы не согласны. Используйте клавишу ESC, чтобы отменить предложенное действие и получить новую подсказку, которая направит его в нужное русло. Вы — пилот.
- Поощряйте использование инструментов. Если ИИ кажется растерянным или выдумывает информацию, поощряйте его использовать доступные инструменты. Подсказки типа «Можете ли вы использовать поиск Google для проверки этого?» или «Используйте инструмент read_file, чтобы понять текущий код, прежде чем вносить изменения» могут быть очень эффективными.
- Избегайте ручных изменений. Старайтесь, чтобы всю работу выполнял ИИ. Это основной навык, который вы оттачиваете. Однако, если вам необходимо внести ручное изменение, сообщите об этом ИИ позже. Подсказка типа «Я вручную обновил файл README.md. Пожалуйста, прочтите его еще раз, чтобы освежить свои знания» обеспечит синхронизацию ИИ с вашим проектом.
- Вы пробовали выключить и снова включить? В редких случаях, когда ИИ пытается навязать заданный путь вопреки вашей команде, это может быть связано с ухудшением контекста (иногда это также называют «порчей контекста»). В этом случае вы можете использовать команду Gemini CLI "/compress", чтобы уменьшить контекстный шум, или, в крайних случаях, вы можете использовать команду "/clear", чтобы очистить всю историю сессии.
2. Настройка среды
Выберите один из следующих вариантов: Самостоятельная настройка среды, если вы хотите запустить это.
Выполните практическое занятие на своем компьютере или запустите Cloud Shell, если хотите провести это занятие полностью в облаке.
Настройка среды для самостоятельного обучения
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



- Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы всегда можете его изменить.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор вашего проекта (обычно обозначается как
PROJECT_ID). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он сохраняется на протяжении всего проекта. - К вашему сведению, существует третье значение — номер проекта , которое используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
- Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не потребует больших затрат, если вообще потребует. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.
В консоли Google Cloud нажмите на значок Cloud Shell на панели инструментов в правом верхнем углу:

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

Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог объемом 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Вся работа в этом практическом задании может выполняться в браузере. Вам не нужно ничего устанавливать.
3. Начало работы с Gemini CLI
В этом разделе вы узнаете о Gemini CLI, в том числе о том, как его установить и настроить для вашей среды.
Что такое Gemini CLI?
Gemini CLI — это интерфейс командной строки на основе искусственного интеллекта, который может помочь вам в решении широкого спектра задач разработки. Он способен понимать контекст вашего проекта, отвечать на вопросы, генерировать код и использовать внешние инструменты для расширения своих возможностей.
Установка
Установите Gemini CLI глобально с помощью npm.
npm install -g @google/gemini-cli
Вы можете убедиться в установке CLI, выполнив следующую команду:
gemini --version
Конфигурация
Поведение Gemini CLI контролируется конфигурационными файлами и переменными среды. Существует два ключевых файла:
-
GEMINI.md: Этот файл содержит рекомендации и контекст для ИИ. Интерфейс командной строки считывает этот файл, чтобы понять стандарты и соглашения кодирования вашего проекта. -
.gemini/settings.json: Этот файл управляет конфигурацией CLI, включая способ подключения к внешним инструментам. Позже мы будем использовать этот файл для настройки CLI для работы с сервером MCP, который мы создаём в этой лабораторной работе.
Сначала мы настроим среду, а затем перейдем к созданию файла GEMINI.md . Файл settings.json будет настроен позже.
- Создайте и инициализируйте каталог проекта:
mkdir godoctor && cd godoctor go mod init godoctor
- Аутентификация с использованием учетных данных приложения Google Cloud по умолчанию:
Нам необходимо войти в учетную запись, имеющую доступ к проекту GCP, который вы будете использовать для этой практической работы:
- Убедитесь, что у вас установлен и инициализирован Google Cloud SDK .
- Выполните следующую команду, чтобы настроить учетные данные приложения по умолчанию:
gcloud auth application-default login
4. Контекстный файл (GEMINI.md)
Контекстные файлы, использующие имя по умолчанию GEMINI.md, применяются для предоставления обучающего контекста модели Gemini. Вы можете использовать эти файлы для предоставления инструкций, специфичных для проекта, определения персоны или предоставления руководств по стилю кодирования, чтобы сделать ответы ИИ более точными и адаптированными к вашим потребностям.
Чтобы гарантировать, что ИИ-помощник будет генерировать высококачественный, идиоматический код на Go, мы напишем файл GEMINI.md с некоторыми распространенными рекомендациями для разработчиков на Go.
Цель: Создать файл GEMINI.md, который будет служить набором правил для ИИ-помощника в рамках этого проекта.
Откройте свою IDE, чтобы создать файл GEMINI.md со следующим содержимым. Если вы используете Cloud Shell, вы можете открыть редактор, используя команду ниже:
cloudshell edit .
Задача: Создайте файл с именем GEMINI.md в корневой директории вашего проекта godoctor и вставьте в него следующее содержимое.
# Go Development Guidelines
All code contributed to this project must adhere to the following principles.
## 1. Formatting
All Go code **must** be formatted with `gofmt` before being submitted.
## 2. Naming Conventions
- **Packages:** Use short, concise, all-lowercase names.
- **Variables, Functions, and Methods:** Use `camelCase` for unexported identifiers and `PascalCase` for exported identifiers.
- **Interfaces:** Name interfaces for what they do (e.g., `io.Reader`), not with a prefix like `I`.
## 3. Error Handling
- Errors are values. Do not discard them.
- Handle errors explicitly using the `if err != nil` pattern.
- Provide context to errors using `fmt.Errorf("context: %w", err)`.
## 4. Simplicity and Clarity
- "Clear is better than clever." Write code that is easy to understand.
- Avoid unnecessary complexity and abstractions.
- Prefer returning concrete types, not interfaces.
## 5. Documentation
- All exported identifiers (`PascalCase`) **must** have a doc comment.
- Comments should explain the *why*, not the *what*.
## 6. Project structure
- cmd/ contains source code for target binaries (e.g. server, client)
- internal/ contains source code for packages not meant to be exported (e.g. internal/tools/hello)
- bin/ contains the compiled binaries
- At the root place README.md, go.mod and go.sum
Теперь ваша среда разработки полностью настроена.
5. Начальная сборка: сервер документации
Ваша первая задача — создать начальную версию сервера godoctor . Эта версия должна представлять собой минимальное приложение, предоставляющее единственный инструмент под названием read_docs , который позволяет искать документацию Go.
Цель: Создать готовый к использованию в производственной среде MCP-сервер, предоставляющий доступ к команде `go doc`, что позволит студентам магистратуры по языку программирования запрашивать документацию Go.
Выполните команду Gemini CLI в командной оболочке:
gemini
При первом запуске CLI вам будет предложено выбрать режим аутентификации и тему оформления.
Если вы выполняете этот практический урок в Cloud Shell, выберите опцию « Использовать учетные данные пользователя Cloud Shell» . В противном случае вы можете использовать вход через Google , чтобы войти в систему с помощью личной учетной записи Google и воспользоваться щедрым бесплатным уровнем Gemini CLI. Экран выбора аутентификации будет выглядеть примерно так:

Если вам нужно изменить свой выбор, вы можете ввести /auth и нажать Enter, чтобы снова открыть это меню.
Далее вам будет предложено выбрать тему:

Аналогично команде /auth , вы также можете изменить тему позже с помощью команды /theme .
После выбора метода аутентификации и предпочтительной темы оформления вы перейдете в командную строку. Здесь вы можете вводить команды, например:
Write a hello world application in Go
Интерфейс командной строки (CLI) использует сочетание собственных алгоритмов (на основе модели Gemini, например, Gemini Flash или Gemini Pro) и инструментов для выполнения задач. Он использует инструменты всякий раз, когда ему необходимо взаимодействовать с файловой системой или внешними сервисами, такими как API, базы данных и т. д. Примерами инструментов, которые поставляются «из коробки», или «внутренних инструментов», являются read_file , write_file , web_fetch и google_search . Сервер MCP, который мы разрабатываем, также станет инструментом, доступным для CLI.
При первом запуске инструмента он запросит ваше разрешение. Вы можете предоставить однократное разрешение (разрешить один раз), общее разрешение на всю оставшуюся сессию (разрешить всегда) или отклонить запрос. Если это операция редактирования файла, вы также найдете возможность редактировать файл с помощью внешнего редактора, на случай, если вам потребуется внести какие-либо изменения. Например, вот вывод команды выше для создания программы "Hello World":

Помимо командных подсказок, вы также можете использовать команды со слэшем. Если вы введете "/", CLI автоматически покажет вам варианты автозаполнения. Вы можете продолжить ввод полной команды или выбрать одну из предложенных. Упомянутые выше команды /auth и /theme — это пара таких команд.

Как только вы освоите интерфейс, вы можете приступить к основной задаче этого раздела, а именно — попросить CLI написать для нас MCP-сервер.
Создание сервера MCP "Hello World"
Один из лучших способов обеспечить более согласованную работу модели — разбить сложные задачи на поэтапные шаги. Хотя модель может справиться со сложной задачей самостоятельно, без правильной настройки ей потребуется много времени, чтобы найти подходящий способ её реализации.
Для более последовательного подхода мы сначала дадим команду создать MCP-сервер "Hello World", прежде чем реализовывать необходимую нам функциональность (изучив документацию Go).
Пример запроса показан ниже:
Create a Model Context Protocol (MCP) server that exposes a "hello_world" tool. This tool, when called, should return the message "Hello, MCP world!" For the MCP implementation, you should use the official Go SDK for MCP (github.com/modelcontextprotocol/go-sdk/mcp) and use the stdio transport. TODO: - Download the dependency: `go get github.com/modelcontextprotocol/go-sdk/mcp` - Inspect the documentation of the SDK: `go doc github.com/modelcontextprotocol/go-sdk/mcp` - Build a `server` command that supports stdio transport only - Build a `client` command that connects to the server over command transport to test the server Acceptance Criteria: - `./bin/client --list-tools` returns the list of server tools including "hello_world" - `./bin/client --call-tool` "hello_world" returns the output "Hello, MCP world!"
Обратите внимание, что приведенное выше задание состоит из трех основных частей:
- Описание задачи, включая то, что мы хотим создать, и ограничения (например, использовать официальный SDK вместо любого другого SDK, использовать стандартный ввод/вывод вместо HTTP).
- Разбивка задач на этапы выполнения (TODO)
- Критерии приемки задачи, которые служат процедурой тестирования, позволяющей агенту узнать, когда задача выполнена.
Наличие этих трех компонентов поможет модели более последовательно достигать желаемых результатов.
Реализация инструмента read_docs
Как только у нас будет рабочая реализация, мы сможем перейти к созданию настоящего инструмента "read_docs":
Add a new tool to our MCP server called "read_docs" that invokes the "go doc" shell command. The tool will take a mandatory "package" argument and an optional "symbol" argument. TODO: - create a package `./internal/tools/docs` - register the tool with the MCP server - update the client to support the "read_docs" tool by providing arguments to the tool call Acceptance Criteria: - `./bin/client --tools-list` show both hello_world and read_docs - `./bin/client --tool-call read_docs fmt` returns the documentation for the `fmt` package - `./bin/client --tool-call read_docs fmt.Println` returns the documentation for the `fmt.Println` function - `./bin/client --tool-call read_docs github.com/modelcontextprotocol/go-sdk/mcp` returns documentation for the `mcp` package
Примечание: вы можете поэкспериментировать с этим заданием или придумать своё собственное.
Полезные советы
Учитывая, что MCP — это всё ещё новая концепция, а Go SDK для MCP — это новая библиотека, на этом этапе Gemini может потребоваться много времени, чтобы самостоятельно найти правильную реализацию. Чтобы помочь модели найти правильное решение, вы можете попробовать следующее:
- Если модель пропустила чтение документации на каком-либо этапе, нажмите ESC и напомните ей об этом. Если вы не знакомы с Go, запуск команды "go doc" плюс название пакета "go doc github.com/modelcontextprotocol/go-sdk/mcp " вернет нужную документацию.
- Модуль верхнего уровня " github.com/modelcontextprotocol/go-sdk " не имеет документации (поскольку в нём нет кода на Go), вам нужно указать модели искать полный путь.
- И наоборот, если модель выдает несуществующий пакет, например, "go doc github.com/modelcontextprotocol/go-sdk/mcp/server ", просто направьте ее к пакету верхнего уровня.
6. Настройка godoctor в качестве MCP-сервера для Gemini CLI
После того, как ИИ-помощник сгенерирует код для клиента и сервера, вы можете дать ему указание выполнить несколько ручных тестов. Например:
retrieve the documentation for the package net/http
Обязательно протестируйте это также с внешней зависимостью (не входящей в стандартную библиотеку):
retrieve the documentation for the github.com/modelcontextprotocol/go-sdk/mcp package
Когда вы будете удовлетворены результатами, дайте указание программе написать файл README.md с инструкциями по использованию и разработке этого проекта.
Now write a detailed README.md file explaining both from a user and a developer perspective how to use and to build this project.
Теперь мы настроим сервер таким образом, чтобы Gemini CLI мог использовать его на следующем этапе разработки.
- Попросите CLI обновить файл GEMINI.md, чтобы в качестве предпочтительного метода чтения документации использовался
read_docs:
update the GEMINI.md file to include instructions to always use the read_docs tool to retrieve documentation about Go packages or symbols. This should be done whenever seeing an import for the first time in a session or after a new dependency is installed to the project (e.g. via `go get`)
- Теперь нам нужно перезапустить Gemini CLI, чтобы настроить сервер MCP. Сначала сохраним сессию чата, чтобы вы могли продолжить с того места, где остановились, после перезапуска.
/chat save godoctor-workshop
- Чтобы выйти из командной строки, дважды нажмите Ctrl+D или введите команду
/quit. - На предыдущих шагах агент должен был скомпилировать для вас исполняемый файл сервера, но мы компилируем сервер заново под другим именем, чтобы это не повлияло на его работу при изменении исходного кода:
mkdir -p bin && go build -o ./bin/godoctor ./cmd/server
- Настройка Gemini CLI для локального инструмента: создайте файл
.gemini/settings.jsonв корневой директории вашего проекта и добавьте разделmcpServers, чтобы указать Gemini CLI, как запускать скомпилированный сервер.
mkdir -p .gemini && touch .gemini/settings.json
- Теперь добавьте следующее содержимое в новый файл, используя либо редактор Cloudshell, либо вашу любимую IDE.
{
"mcpServers": {
"godoctor": {
"command": "./bin/godoctor"
}
}
}
- Запустите Gemini CLI с помощью команды
gemini - Вы сможете убедиться, что инструмент загружен, введя команду
/mcp. Также вы можете отобразить полное описание инструментов, используя/mcp desc:

- Проверьте интеграцию, запросив у Gemini CLI использование вашего инструмента с помощью запроса типа "Покажите документацию по пакету net/http".
Вы должны увидеть что-то подобное:

Если инструмент работает корректно, вы должны увидеть документацию, полученную в результате вызова инструмента:

Поздравляем, вы создали инструмент MCP! Но это еще не все, мы можем сделать этот сервер еще более полезным.
7. Добавление средства проверки кода на основе искусственного интеллекта.
Давайте добавим более сложную функцию на основе искусственного интеллекта: средство проверки кода, использующее API Gemini.
Теперь вы можете восстановить предыдущую сессию чата с помощью команды /chat resume godoctor-workshop. Это загрузит контекст сессии до момента завершения разработки read_docs , поэтому модель будет обладать необходимыми знаниями для создания нового инструмента.
Для работы этого инструмента потребуется доступ к Vertex AI, поэтому сначала необходимо включить API. Вы можете запускать команды оболочки, не выходя из Gemini CLI, набрав восклицательный знак (!) в пустой командной строке. Это переведет Gemini CLI в режим оболочки.
Для включения API Vertex AI выполните следующую команду в режиме командной строки:
gcloud services enable aiplatform.googleapis.com
После завершения выполнения команды вы можете вернуться в командный режим, нажав клавишу Esc.
Цель: Добавить в существующий проект новый инструмент под названием code_review. Этот инструмент будет использовать API Gemini для анализа кода Go и предоставления обратной связи.
Пример задания:
Add a new tool to my project called code_review. This tool should use the Gemini API on Vertex AI (with model id gemini-2.5-pro) to analyze Go code and provide a list of improvements according to the best practices accepted by the Go community. The tool should take the Go code content and an optional hint as input. The hint will be used to provide additional guidance for the AI reviewer, like "focus on security" or "help me simplify this code". The tool output should be text in Markdown format. TODO: - add the genai SDK dependency with `go get import google.golang.org/genai` - create the tool code in ./internal/tools/code/review.go - create a code review prompt to be used by the tool - use go-genai with Vertex AI authentication to call gemini-2.5-pro - register the tool with the server - add a flag to the server to set the Google Cloud Project ID: --project - add a flag to the server to set the Google Cloud Location: --location - add support to the review tool in the client CLI NOT TO DO: - DO NOT use the package github.com/google/generative-ai-go/genai as it is DEPRECATED - DO NOT use the package cloud.google.com/go/vertexai/genai as it has been superseded by google.golang.org/genai Acceptance Criteria: - `./bin/client --tools-list` show all tools including `code_review` - `./bin/client --tool-call code_review internal/tools/code/review.go` returns the code review for the "review.go" file
Полезные советы
- Как только модель начнет работу, вы можете автоматически увидеть запрос на вызов инструмента
read_docsдля просмотра документации к пакетуgenai. Если этого не произойдет, вы всегда можете прервать процесс с помощью клавиши Escape и напомнить ей, что теперь в ее распоряжении есть инструментread_docs. - Если вы видите, что программа пытается использовать неправильный SDK GenAI (даже несмотря на то, что в приглашении командной строки есть четкий список запрещенных версий), перенаправьте ее на правильный SDK.
Тестирование средства проверки кода
- Сохраните сессию чата с помощью
/chat save godoctor-workshop, а затем выйдите из командной строки, дважды нажав Ctrl+D. - Перекомпилируйте сервер, используя новое определение инструмента:
go build -o ./bin/godoctor ./cmd/server
- С помощью вашей IDE обновите файл
.gemini/settings.json, добавив в него конфигурацию среды для Vertex AI:
{
"mcpServers": {
"godoctor": {
"command": "./bin/godoctor",
"env": {
"GOOGLE_CLOUD_USE_VERTEXAI": "true",
"GOOGLE_CLOUD_PROJECT": "<your-project-id>",
"GOOGLE_CLOUD_LOCATION": "<your-preferred-region>"
}
}
}
}
- Запустите Gemini CLI снова. Восстановите сессию чата с помощью
/chat resume godoctor-workshop - Убедитесь, что инструмент включен, введя команду
/mcp. Вы должны увидеть что-то подобное:

- Теперь давайте протестируем инструмент
code_review, просмотрев один из его исходных файлов:
Use the code_review tool to review cmd/server/main.go
You should see something like this:

Благодаря работающему инструменту проверки кода, теперь вы можете предложить модели применить некоторые из найденных ею улучшений, чтобы создать полноценный «самосовершенствующийся» рабочий процесс!
Теперь вы убедились, что инструмент code-review работает. В следующем разделе вы займетесь его развертыванием в облаке. Сохраните текущую сессию с помощью /chat save godoctor-workshop и выйдите из командной строки.
8. Подготовьте свой сервер к работе в облаке.
Разработанный нами на данный момент сервер MCP работает только на локальном компьютере, что вполне подходит для разработки инструментов для собственного использования, но в корпоративных средах часто возникает необходимость развертывания инструментов для более широкого использования сотнями или даже тысячами разработчиков.
Для масштабирования нашего MCP-сервера нам необходимо преобразовать его из сервера, работающего только со стандартным вводом-выводом, в сервер, поддерживающий HTTP, и развернуть его в месте, доступном для разных разработчиков. Для этой цели мы будем использовать транспортный режим, определенный в спецификации MCP как потоковый HTTP, и использовать Cloud Run в качестве целевого сервера развертывания.
Цель: Переработать сервер godoctor для использования потокового HTTP-транспорта.
Пример задания:
The godoctor server is currently using the stdio transport. I want to prepare it to be deployed to Cloud Run, so we need to add support to use the Streamable HTTP transport. TODO: - Update server to enable Streamable HTTP via the -http flag. - An optional -listen flag can be specified to set the port to listen - If no -http flag is specified, the server defaults to stdio transport and -listen is ignored - Update client to use Streamable HTTP via the -addr flag - If no flag is specified, the client defaults to command transport - Create a shell script test_server.sh to support testing NOT TO DO: - DO NOT use the HTTP+SSE protocol as it has been deprecated by the MCP specification Acceptance Criteria - Create a shell script that: - Runs the server in the background; - Runs the client connecting over HTTP and call list tools - Kills the background process - The shell script should run without failures
Полезные советы
- Модель может попытаться использовать HTTP+SSE, который устарел. Если вы видите, что она идет по этому пути, перенаправьте ее обратно к потоковому HTTP.
- Текущая версия Gemini CLI (0.26.0) не поддерживает запуск процессов в фоновом режиме (любой процесс, запущенный с помощью
run_shell_commandзавершается после возврата вызова инструмента), поэтому мы просим Gemini автоматизировать процесс тестирования с помощью скрипта. Эта функция запланирована и будет добавлена в ближайшем будущем, что может упростить процесс тестирования.
Дополнительно: Тестирование сервера MCP с использованием HTTP.
Если вы хотите настроить Gemini CLI для использования сервера по протоколу HTTP:
- Сохраните сессию и выйдите из командной строки.
- Отредактируйте файл
.gemini/settings.jsonи измените конфигурацию, чтобы она указывала на ваш локальный работающий сервер.
"mcpServers": {
"godoctor": {
"httpUrl": "http://localhost:8080"
}
}
- Во втором терминале запустите локально HTTP-сервер:
go build -o ./bin/godoctor ./cmd/server && ./bin/godoctor -listen=:8080
- Перезапустите Gemini CLI и введите запрос на проверку соединения, например: «Используйте инструмент godoctor для получения документации для fmt.Println».
- Остановите сервер с помощью Ctrl+C после завершения тестирования.
9. Контейнеризация приложения с помощью Docker.
Теперь, когда наш сервер использует правильный транспортный протокол, мы можем поместить его в контейнер для развертывания.
Цель: Создать Dockerfile для упаковки сервера godoctor в портативный, готовый к использованию в производственной среде образ контейнера.
Пример задания:
Please create a multi-stage Dockerfile that compiles the Go binary and copies it into a minimal golang image like golang:1.25.6-alpine. The image should support the following environment variables:
- GOOGLE_CLOUD_USE_VERTEXAI
- GOOGLE_CLOUD_PROJECT
- GOOGLE_CLOUD_LOCATION
Acceptance Criteria:
- The image builds successfully
- Create a script test_docker.sh to launch the docker image in background and test the connectivity with the client:
- Call list_tools on the client pointing to the server running on Docker
- Call read_docs for fmt.Println
- Stop the server
- The script should run without failures
(Необязательно) — ручная проверка образа Docker
После создания Dockerfile соберите образ и запустите его, чтобы убедиться в корректной работе.
- Создайте контейнер:
docker build -t godoctor:latest .
- Запустите контейнер локально:
docker run -p 8080:8080 -e PORT=8080 godoctor:latest
- Проверьте работу контейнера: в другом терминале запустите Gemini CLI и попросите его загрузить документацию.
- Остановите сервер с помощью Ctrl+C после завершения тестирования.
10. Развертывание в облаке
Теперь пришло время развернуть наш контейнер в облаке.
Цель: Развернуть контейнеризированный сервер godoctor в Google Cloud Run.
Пример задания:
Now please deploy this image to Cloud Run and return me an URL I can use to call the MCP tool. Configure Cloud Run to use the following environment variables: - GOOGLE_CLOUD_USE_VERTEXAI: true, - GOOGLE_CLOUD_PROJECT: <your-project-id> - GOOGLE_CLOUD_LOCATION: <your-preferred-region> TODO: - Run `docker build -t gcr.io/daniela-genai-sandbox/godoctor .` - Run `gcloud run deploy godoctor --image` with the image created above Acceptance Criteria: - Call list-tools with the client pointing to the CloudRun endpoint
После завершения развертывания мы настроим Gemini CLI для использования только что развернутого вами инструмента.
Обновите файл .gemini/settings.json , чтобы изменить конфигурацию инструмента MCP и указать на развернутый вами сервис, или попросите Gemini CLI сделать это за вас:
now update the .gemini/settings.json file to use this URL for the godoctor server
В заключительном разделе mcpServers должно быть следующее (не забудьте заменить заполнитель на фактический URL-адрес вашего приложения Cloud Run):
"mcpServers": {
"godoctor": {
"httpUrl": "https://<your-cloud-run-id>.us-central1.run.app"
}
}
Тестирование развертывания Cloud Run
Теперь вы готовы к финальному сквозному тестированию.
Перезапустите Gemini CLI ещё раз (используя /chat save и /chat resume если хотите сохранить контекст). Теперь CLI должен иметь возможность связаться с удалённым сервером MCP. Попробуйте запросить документацию по любым пакетам.
Вы также можете протестировать инструмент проверки кода:
Use the godoctor tool to review the cmd/godoctor/main.go file
Уборка
После завершения тестирования не забудьте очистить среду. Вы можете указать Gemini либо удалить ваш проект, либо только развертывание CloudRun. Пример запроса:
I'm done with my tests on the CloudRun server, please delete this deployment for me and revert my .gemini/settings.json to use the local version.
11. Поздравляем!
Вы успешно помогли ИИ-помощнику создать, контейнеризировать и развернуть сложный инструмент на основе искусственного интеллекта. Что еще важнее, вы отработали важнейший навык современной разработки программного обеспечения: преобразование требований в эффективные подсказки. Вы успешно расширили возможности Gemini CLI с помощью пользовательского инструмента MCP, сделав его более мощным и специализированным помощником для разработки на Go.