Authenticated Cloud Run — Защищённый MCP-сервер через Google Cloud Run
Это решение позволяет хостить MCP-сервер с SSE-транспортом на Google Cloud Run и безопасно подключаться к нему из интернета, используя встроенную IAM-аутентификацию GCP. Пока официальный MCP не доработал механизмы авторизации (планируется на H1 2025), это — практичный вариант для работы в команде уже сейчас.
В основе лежит прокси на Node.js, который использует Google Cloud SDK для получения токенов доступа и создаёт локальный туннель. Клиент (Cursor, другой MCP-клиент) подключается к localhost:3030, а прокси перенаправляет запросы в защищённый Cloud Run.
Как это работает
- MCP-сервер развёрнут на Cloud Run с включённой IAM-аутентификацией.
- На локальной машине запускается прокси-скрипт (
mcp_proxy.ts), который:
- проверяет аутентификацию через
gcloud;
- автоматически получает токен;
- поднимает локальный сервер (по умолчанию на порту 3030);
- проксирует все запросы в Cloud Run, добавляя заголовок
Authorization.
- MCP-клиент подключается к
http://localhost:3030 — и работает так, как будто сервер запущен локально.
Быстрый старт (TL;DR)
Если у вас уже установлены Docker и gcloud CLI, развернуть сервер можно за несколько минут.
-
Клонируйте репозиторий и установите зависимости:
npm install
-
Обновите deploy.sh: укажите свой PROJECT_ID, REGION и SERVICE_ACCOUNT_EMAIL.
-
Запустите деплой:
chmod +x deploy.sh
./deploy.sh
Скрипт соберёт Docker-образ, загрузит его в Container Registry и развернёт сервис на Cloud Run с включённой аутентификацией.
-
Скопируйте URL Cloud Run, который появится после деплоя.
-
Настройте прокси: откройте mcp_proxy.ts и укажите там:
cloudRunUrl — URL вашего сервиса;
projectId — ID проекта GCP.
-
Запустите прокси:
npx ts-node mcp_proxy.ts
-
Подключите клиент. Например, в Cursor: Settings > Features > MCP Servers → Add → выберите SSE и укажите http://localhost:3030. Убедитесь, что вы используете Agent mode в Composer.
Установка и настройка
Локальный запуск (без Cloud Run)
Если нужно сначала отладить сервер локально:
npm run dev
Сервер будет доступен по умолчанию на http://localhost:3000. Для теста можно настроить прокси на этот адрес.
Деплой на Cloud Run
-
Установите Google Cloud SDK и выполните gcloud auth login.
-
Убедитесь, что у вас есть проект GCP и включены биллинг и Cloud Run API.
-
Отредактируйте deploy.sh:
PROJECT_ID="ваш-проект"
REGION="us-central1" # выберите ближайший регион
SERVICE_ACCOUNT_EMAIL="your-sa@project.iam.gserviceaccount.com"
Важно: сервисная учётная запись должна иметь роль roles/run.invoker для Cloud Run.
-
Запустите скрипт:
chmod +x deploy.sh
./deploy.sh
После успешного деплоя вы увидите URL сервиса, например https://my-mcp-server-xxxxx-uc.a.run.app.
Подключение к серверу
Прокси-скрипт
В файле mcp_proxy.ts укажите:
const cloudRunUrl = "https://ваш-сервис-xxxxx-uc.a.run.app";
const projectId = "ваш-проект";
Запустите:
npx ts-node mcp_proxy.ts
Прокси проверит, авторизованы ли вы в Google Cloud, получит токен и начнёт слушать порт 3030.
Использование в Cursor
- Откройте Settings → Features → MCP Servers.
- Нажмите Add new MCP server.
- В поле Type выберите SSE.
- В поле URL укажите
http://localhost:3030.
- Сохраните.
Теперь можно создавать композиции в Agent mode — запросы будут отправляться на Cloud Run через прокси.
Отладка
- Убедитесь, что URL в
mcp_proxy.ts соответствует развёрнутому сервису.
- Проверьте логи Cloud Run в консоли GCP — там видны все ошибки сервера.
- Если прокси не запускается, проверьте, что
gcloud auth application-default login выполнен.
Безопасность
- Сервер Cloud Run недоступен из интернета напрямую — все запросы требуют IAM-токена.
- Подключаться могут только пользователи, у которых есть доступ к Google Cloud SDK и права на сервис.
- Прокси не хранит токены на диске — они запрашиваются каждый раз при запуске.
- Вся передача данных идёт по HTTPS (стандарт Cloud Run).
Возможные проблемы
| Симптом |
Решение |
403 Forbidden |
Проверьте, что сервис-аккаунт в deploy.sh имеет роль roles/run.invoker, а у пользователя — роль roles/iam.serviceAccountTokenCreator |
Прокси не видит gcloud |
Установите Google Cloud SDK и выполните gcloud auth application-default login |
| Cloud Run не отвечает |
Проверьте, что сервис развёрнут и не имеет ошибок в логах |
Вклад в развитие
Приветствуются issues и pull requests. Лицензия — MIT.
Комментарии
Комментариев пока нет. Будьте первым.