К основному содержимому

MCP Tunnels

Что это?

Безопасно подключайте Claude к серверам MCP, работающим в вашей приватной сети, без открытия входящих портов и без раскрытия сервисов в интернет. MCP Tunnels в настоящее время находится в закрытой бета-версии и использует сервис Tunnel от Cloudflare.

Как это работает

MCP Tunnels создают зашифрованное соединение между Claude и вашими внутренними серверами MCP с несколькими уровнями безопасности.

Когда Claude нужно получить доступ к серверу MCP в вашей приватной сети, запрос проходит через защищённый туннель. Вы развёртываете два компонента со своей стороны:

  • cloudflared (агент туннеля Cloudflare)

  • MCP Gateway (предоставляется Anthropic)

Cloudflared инициирует исходящее соединение с граничным сервером Cloudflare. Входящие порты в вашем брандмауэре открывать не требуется. MCP Gateway завершает внутренний уровень TLS, проверяет IP-адреса вышестоящих серверов для предотвращения SSRF и маршрутизирует каждый запрос на правильный сервер MCP на основе поддомена.

Соединение защищено тремя независимыми уровнями: внешний mTLS между Anthropic и Cloudflare (с проверкой IP), внутренний TLS, который шифрует полезные нагрузки от конца к концу от бэкенда Anthropic к вашему шлюзу (разработан так, чтобы Cloudflare не имел доступа к полезным нагрузкам MCP), и аутентификация OAuth на уровне приложения на каждом сервере MCP.

Что вы развёртываете

cloudflared

Агент туннеля Cloudflare. Инициирует только исходящие соединения — входящие порты не требуются.

MCP Gateway

Компонент, предоставляемый Anthropic, который завершает внутренний TLS, проверяет IP-адреса и маршрутизирует запросы к вашим серверам MCP.

Ключевые свойства безопасности

  • Входящие порты не требуются. cloudflared инициирует только исходящие соединения — ваш брандмауэр остаётся закрытым.

  • Сквозное шифрование. Трафик шифруется при передаче от бэкенда Anthropic к вашему шлюзу. Полезные нагрузки MCP не могут быть прочитаны Cloudflare.

  • Защита в глубину. Несколько уровней аутентификации: mTLS, внутренний TLS и OAuth на уровне приложения.

  • Защита от SSRF. Шлюз проверяет IP-адреса вышестоящих серверов для предотвращения атак подделки запросов.

Это руководство содержит эталонные развёртывания через Helm (для Kubernetes) и Docker Compose. Вы несёте ответственность за адаптацию их в соответствии с требованиями безопасности вашей организации.

Разделённая ответственность

Обеспечение безопасности этой системы — это разделённая ответственность между Anthropic и вашей организацией.

Anthropic несёт ответственность за:

  • Обеспечение того, чтобы только Anthropic имел доступ к туннелям

  • Проверка вашего сертификата CA перед подключением к вашему шлюзу

  • Обеспечение того, чтобы Claude отправлял запросы только на туннели, принадлежащие вашей организации

Вы несёте ответственность за:

  • Следование рекомендациям в этом документе и любым последующим рекомендациям

  • Защита токена туннеля и приватных ключей TLS

  • Настройка ваших серверов MCP для использования аутентификации OAuth, как описано в спецификации MCP

  • Ограничение доступа к хостам вашего шлюза и серверам MCP для соответствующего персонала

  • Уведомление Anthropic, если вы подозреваете, что система была скомпрометирована (см. Реагирование на предполагаемое нарушение)

⚠️ Риск учётных данных. Если злоумышленник получит ваш токен туннеля и один из ваших приватных ключей TLS, он сможет выдать себя за ваш шлюз и прочитать полезные нагрузки запросов MCP, включая токены OAuth. Защищайте эти учётные данные в соответствии с требованиями безопасности вашей организации — включая разрешения файлов, шифрование в покое и управление секретами.


Предварительные требования

  • Цель развёртывания — кластер Kubernetes (для Helm) или виртуальная машина с Docker и Docker Compose.

  • Токен API Anthropic для API Tunnels — создайте его из claude.ai → Organization Settings → Connectors → Tunnels API. Установка использует этот токен для подготовки туннеля и регистрации вашего сертификата CA. Шлюзу он не требуется во время выполнения. Отозовите его после завершения установки.

  • Сетевой доступ — исходящее соединение согласно таблице ниже.

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

Требования к сети

Компонент

Назначение

Назначение

Установка (одноразово)

api.anthropic.com:443

(порт 443)

Подготовка туннеля

cloudflared

Граничный сервер Cloudflare, порт 7844 TCP/UDP (198.41.192.0/19, 2606:4700:a0::/44)

Туннельное соединение

MCP Gateway

Ваши MCP серверы

Входящий трафик

Смотрите документацию по брандмауэру туннеля Cloudflare для получения авторитетного списка IP-адресов. Пользователи Helm могут применить это ограничение исходящего трафика, включив значение networkPolicy диаграммы.


Выберите метод развертывания

MCP Tunnels можно развернуть через Helm (Kubernetes) или Docker Compose. Выберите метод, который подходит для вашей инфраструктуры.

⎈ Helm / Kubernetes

Рекомендуется для большинства клиентов. Автоматизирует подготовку туннеля и обновление сертификатов. Хранит учетные данные как Secrets.

🐳 Docker Compose

Для развертываний на одном хосте или виртуальной машине.


Развертывание Helm / Kubernetes

1. Получите значения диаграммы

Загрузите файл значений по умолчанию. Он включает комментарии, объясняющие каждое поле.

Shell

helm show values \
oci://us-docker.pkg.dev/anthropic-public-registry/charts/mcp-tunnel \
--version 0.1.0 > values.yaml

2. Настройте ваши маршруты

Отредактируйте values.yaml и добавьте по крайней мере один маршрут в gateway.config.routes. Каждый маршрут сопоставляет префикс поддомена с URL входящего MCP сервера.

3. Проверьте отрендеренные манифесты

Отрендеризируйте диаграмму с токеном-заполнителем, чтобы проверить ресурсы Kubernetes перед установкой. Диаграмма требует api.token для рендеринга, но helm template не вызывает API.

Shell

helm template mcp-tunnel \
oci://us-docker.pkg.dev/anthropic-public-registry/charts/mcp-tunnel \
--version 0.1.0 \
-n mcp-tunnel \
-f values.yaml \
--set api.token=placeholder > rendered.yaml

Проверьте rendered.yaml в соответствии с практиками вашей организации по проверке манифестов третьих сторон.

4. Установите диаграмму

Сохраните ваш API токен в переменной окружения, затем установите. Рекомендуется использовать отдельное пространство имен для изоляции.

Shell

# Paste your API token (input is hidden)
read -rs API_TOKEN && export API_TOKEN

helm install mcp-tunnel \
oci://us-docker.pkg.dev/anthropic-public-registry/charts/mcp-tunnel \
--version 0.1.0 \
--namespace mcp-tunnel --create-namespace \
-f values.yaml \
--set api.token="$API_TOKEN"

⚠️ Важно: Отозвите API токен после завершения установки. Передача токена через --set исключает его из вашего файла значений, но Helm все еще записывает его в историю выпусков (sh.helm.release.v1.* Secrets). Kubernetes Secrets не зашифрованы в покое по умолчанию, поэтому токен остается восстанавливаемым из кластера до его отзыва.

5. Получите домен вашего туннеля

Задание установки записывает домен туннеля в Secret. Вам это понадобится для настройки MCP серверов в Claude.

Shell

kubectl get secret mcp-tunnel -n mcp-tunnel \
-o jsonpath='{.data.tunnel-domain}' | base64 -d

Когда туннель запущен и работает, подключитесь к Claude.

Опционально: Включите NetworkPolicy

Установите networkPolicy.enabled: true в вашем файле значений, чтобы ограничить исходящий трафик пода туннеля на уровне сети. Настройте networkPolicy.mcpServers с селекторами меток подов или диапазонами CIDR для ваших входящих MCP серверов. Политика уже включает правила исходящего трафика для cloudflared для доступа к краю Cloudflare. Ваш CNI кластера должен поддерживать NetworkPolicy — см. файл значений для примера.

Опционально: Конфигурация Gateway

Поля в gateway.config.* передаются в файл конфигурации шлюза. Смотрите Приложение: Конфигурация Gateway для полного списка. Общие корректировки включают upstream.allowed_ips, log_level и upstream.tls для маршрутов https://. Для монтирования дополнительных файлов, на которые ссылается конфигурация (например, пакет CA для upstream.tls.ca_file), используйте gateway.extraVolumes и gateway.extraVolumeMounts.

Обновления

Всегда указывайте --version на helm upgrade. Без этого Helm извлекает последнюю версию диаграммы из реестра, что может быть не тем, что вы проверили.

Для изменений конфигурации (маршруты, реплики, NetworkPolicy и т. д.) API токен не требуется. Задание установки пропускается при обновлениях, если вы не передадите api.token:

Shell

helm upgrade mcp-tunnel \
oci://us-docker.pkg.dev/anthropic-public-registry/charts/mcp-tunnel \
--version 0.1.0 \
-n mcp-tunnel \
-f values.yaml

Для ротации токена туннеля увеличьте tunnel.tokenVersion в вашем файле значений, создайте новый API токен и обновите:

Shell

# Paste your API token (input is hidden)
read -rs API_TOKEN && export API_TOKEN

helm upgrade mcp-tunnel \
oci://us-docker.pkg.dev/anthropic-public-registry/charts/mcp-tunnel \
--version 0.1.0 \
-n mcp-tunnel \
-f values.yaml \
--set api.token="$API_TOKEN"

Отозвите API токен после завершения обновления.

Ведите полный файл значений вместо использования --reuse-values. Helm глубоко объединяет поля карты, поэтому удаление маршрута с --reuse-values молча не срабатывает.

Использование helm template с kubectl или kustomize

Если вы предпочитаете отрендеризировать манифесты и применить их самостоятельно (через kubectl apply или наложения kustomize), используйте внешний режим (setup.enabled: false). Подготовьте туннель отдельно (см. Приложение: API туннелей) и предоставьте учетные данные как предварительно созданные Secrets, на которые ссылаются external.tunnelTokenSecretName и external.serverCertSecretName. Если вы выдаете свои собственные сертификаты вместо использования двоичного файла установки, см. Приложение: Требования к сертификатам.

Развертывание Docker Compose

1. Подготовьте каталог развертывания

Shell

mkdir -p mcp-gateway/{config,tunnel-data}
cd mcp-gateway
sudo chown 65532:65532 tunnel-data

chown позволяет контейнеру (который работает как UID 65532) писать в смонтированный каталог.

2. Создайте docker-compose.yaml

YAML

services:
# One-time provisioning. Run with: docker compose run --rm setup
setup:
image: us-docker.pkg.dev/anthropic-public-registry/images/mcp-gateway@sha256:62ddf0897778c80997ca789189a8a0bd63df241659d661ff9d5b0e06b5ee1dcd
entrypoint: ["/setup"]
command:
- init
- --api-url=https://api.anthropic.com
- --output=dir:/data
- --token-version=1
environment:
- API_TOKEN
volumes:
- ./tunnel-data:/data
user: "65532:65532"
read_only: true
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
profiles: ["setup"]

cloudflared:
# Verify digest at https://hub.docker.com/r/cloudflare/cloudflared/tags
image: cloudflare/cloudflared@sha256:6b599ca3e974349ead3286d178da61d291961182ec3fe9c505e1dd02c8ac31b0
command: tunnel --no-autoupdate --config /etc/cloudflared/config.yaml run
environment:
- TUNNEL_TOKEN
volumes:
- ./config/cloudflared-config.yaml:/etc/cloudflared/config.yaml:ro
restart: unless-stopped
user: "65532:65532"
read_only: true
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
stop_grace_period: 30s
logging:
options:
max-size: "10m"
max-file: "3"

mcp-gateway:
image: us-docker.pkg.dev/anthropic-public-registry/images/mcp-gateway@sha256:62ddf0897778c80997ca789189a8a0bd63df241659d661ff9d5b0e06b5ee1dcd
volumes:
- ./config/mcp-gateway.yaml:/etc/mcp-gateway/config.yaml:ro
- ./tunnel-data:/data:ro
restart: unless-stopped
user: "65532:65532"
read_only: true
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
# Should match shutdown_timeout in mcp-gateway config
stop_grace_period: 30s
logging:
options:
max-size: "10m"
max-file: "3"

Меры безопасности: выполнение без прав root (UID 65532), файловая система только для чтения, без повышения привилегий, все возможности Linux отключены, закрепление образа по дайджесту SHA256.

3. Подготовка туннеля

Shell

# Paste your API token (input is hidden)
read -rs API_TOKEN && export API_TOKEN

docker compose run --rm setup

Команда setup создает туннель через API Tunnels, генерирует сертификат ЦА и сервера, регистрирует ЦА в Anthropic и записывает все выходные данные в ./tunnel-data/.

Получите домен туннеля для следующего шага:

Shell

sudo cat tunnel-data/tunnel-domain

⚠️ Важно: отозвите токен API перед продолжением.

4. Настройка шлюза

Создайте config/mcp-gateway.yaml:

YAML

listen_addr: ":8080"
log_level: info
shutdown_timeout: 30s

# Your tunnel domain from Step 3
tunnel_domain: abcd1234.tunnel.anthropic.com

tls:
cert_file: /data/tls.crt
key_file: /data/tls.key

routes:
# Replace with your actual MCP servers.
# With tunnel_domain set, keys are subdomain prefixes.
docs: http://docs-mcp.internal:8080
search: http://search-mcp.internal:8080

upstream:
allowed_ips:
- 10.0.0.0/8

Все доступные поля см. в Приложение: конфигурация шлюза.

Создайте config/cloudflared-config.yaml:

YAML

ingress:
- service: http://mcp-gateway:8080

5. Развертывание

Shell

export TUNNEL_TOKEN=$(sudo cat tunnel-data/tunnel-token)
docker compose up -d
docker compose logs -f

Структура каталогов:

mcp-gateway/
├── docker-compose.yaml
├── config/
│ ├── cloudflared-config.yaml
│ └── mcp-gateway.yaml
└── tunnel-data/
├── tunnel-id
├── tunnel-domain
├── tunnel-token
├── token-version
├── ca.crt
├── ca.key
├── tls.crt
└── tls.key

Рассмотрите возможность перемещения приватного ключа ЦА и токена туннеля в защищенное хранилище.

Для развертываний с несколькими ВМ: скопируйте каталог mcp-gateway/ на каждый хост. Один и тот же токен туннеля и сертификаты работают на всех репликах.

Когда туннель запущен и работает, подключитесь к Claude.

Обновление сертификата (Compose)

Сертификат сервера действителен 90 дней. Обновите перед истечением срока:

Shell

docker compose run --rm setup renew-cert --output=dir:/data

Шлюз проверяет файл сертификата каждые 30 секунд и автоматически перезагружает его при изменении. Флаги, которые делают эту команду безопасной для запуска по расписанию, см. в Приложение: справочник CLI Setup.

Ротация токена туннеля (Compose)

Отредактируйте docker-compose.yaml, чтобы увеличить --token-version, затем повторно запустите setup с новым токеном API:

# Paste your API token (input is hidden)
read -rs API_TOKEN && export API_TOKEN

docker compose run --rm setup

export TUNNEL_TOKEN=$(sudo cat tunnel-data/tunnel-token)
docker compose up -d cloudflared

Отозвите токен API после завершения ротации.


Подключение к Claude

Когда туннель запущен, зарегистрируйте ваши MCP-серверы в Claude, чтобы они были доступны пользователям.

1. Добавление MCP-серверов

Администратор организации переходит в Organization Settings → Connectors → Add → Custom → Web на claude.ai.

Введите каждый MCP-сервер, используя его имя хоста туннеля. Например, docs.abcd1234.tunnel.anthropic.com. Префикс поддомена соответствует ключу маршрута из конфигурации вашего шлюза.

2. Подключение пользователей

Отдельные пользователи переходят в Settings → Connectors и нажимают Connect для каждого MCP-сервера, который они хотят использовать.

Добавляете больше серверов позже? Добавьте новый маршрут в конфигурацию, примените изменение (helm upgrade или docker compose restart mcp-gateway) и зарегистрируйте новое имя хоста в Claude. Изменения сертификата или cloudflared не требуются. Подстановочный сертификат охватывает все поддомены.

Лучшие практики безопасности

  1. Требуйте OAuth на ваших MCP-серверах. Туннель и слои TLS защищают транспорт, но если они когда-либо будут скомпрометированы, OAuth на уровне приложения по-прежнему предотвращает несанкционированный вызов инструментов. Настройте каждый MCP-сервер на требование аутентификации OAuth, как описано в спецификации MCP.

  2. Включите SSO для вашей организации claude.ai. Токены туннеля генерируются из консоли claude.ai. При включенном SSO элементы управления сеансом вашего поставщика удостоверений управляют сеансами администратора.

  3. Ограничьте allowed_ips. Используйте наименьшие диапазоны CIDR, охватывающие ваши MCP-серверы.

  4. Мониторьте журналы. Установите оповещения о предупреждениях, ошибках и необычных закономерностях.

  5. Ротируйте учетные данные. Ротируйте сертификаты по регулярному расписанию или немедленно, если подозревается компрометация.

  6. Держите образы в актуальном состоянии. Применяйте обновления шлюза оперативно. Закрепляйте образы по дайджесту SHA256.

  7. Ограничьте сетевой доступ. Шлюз и cloudflared должны иметь только необходимый сетевой доступ.

  8. Ограничьте область действия MCP-сервера. MCP-серверы должны предоставлять только необходимую функциональность.

  9. Защитите учетные данные в покое. Применяйте соответствующие разрешения файлов, шифрование в покое и управление секретами к каталогу tunnel-data/ (Compose) или Secret учетных данных (Helm).

Реагирование на предполагаемое нарушение

Если вы подозреваете, что ваши учетные данные туннеля, ключи TLS или какой-либо другой аспект системы был скомпрометирован:

  1. Остановите развертывание немедленно (helm uninstall или docker compose down --timeout 0)

  2. Удалите MCP-серверы из Claude (Organization Settings → Connectors)

  3. Архивируйте туннель через API (см. Teardown, шаг 3)

  4. Свяжитесь с Anthropic, чтобы они могли провести расследование

  5. Ротируйте учетные данные — повторно подготовьте свежий туннель, ротируйте токены OAuth на ваших MCP-серверах

  6. Проверьте логи перед восстановлением сервиса


Устранение неполадок

Ошибки валидации IP

"IP validation failed" в логах шлюза означает, что восходящий адрес разрешился на IP-адрес вне allowed_ips. Проверьте разрешённый IP:

Shell

dig +short docs-mcp.internal

Если IP-адрес легитимен, обновите allowed_ips в конфигурации вашего шлюза, чтобы включить правильный диапазон CIDR.

Туннель не подключается

Проверьте логи cloudflared на наличие ошибок. Частые причины:

  • Неверный токен туннеля

  • Брандмауэр блокирует исходящий порт 7844 TCP/UDP к краевому узлу Cloudflare

Проверьте исходящее соединение с IP-диапазонами Cloudflare: 198.41.192.0/19 и 2606:4700:a0::/44.

Предупреждения о размере буфера UDP

cloudflared может записать failed to sufficiently increase receive buffer size. Это проблема настройки транспорта QUIC — см. документацию по буферам UDP в quic-go для настройки.

Ошибки сертификата

Если рукопожатие TLS не удаётся, проверьте, что:

  • Сертификат сервера не истёк (срок действия 90 дней)

  • SAN сертификата соответствует *.<tunnel-domain>

  • Сертификат ЦС зарегистрирован в Anthropic через API

  • Для Compose файлы сертификатов доступны для чтения UID 65532

Маршрутизация OAuth через туннель (сервер аутентификации за списком разрешённых IP)

Проблема: Ваш сервер аутентификации находится за списком разрешённых исходящих IP-адресов. Бэкенду Claude необходимо обращаться к нему для обнаружения OAuth, регистрации клиента и обмена токенами, но вы не хотите добавлять в белый список диапазоны исходящих IP-адресов Anthropic.

Решение: конфигурация с разделённой конечной точкой. Маршрутизируйте вызовы OAuth между бэкендами через туннель. Оставьте конечную точку /authorize, обращённую к браузеру, на вашем существующем хосте в белом списке. Это работает, потому что Claude читает authorization_endpoint из метаданных обнаружения и перенаправляет браузер пользователя туда. Ему не нужно самому обращаться к этому URL.

Шаг 1: Добавьте маршрут шлюза для вашего сервера аутентификации

YAML — mcp-gateway.yaml

routes:
mcp: http://your-mcp-server:8080
auth: http://your-auth-server:8080

Шаг 2: Предоставьте метаданные обнаружения с разделённой конечной точкой

Сервер аутентификации должен вернуть /.well-known/oauth-authorization-server:

JSON

{
"issuer": "https://auth.<tunnel-id>.tunnel.anthropic.com",
"authorization_endpoint": "https://<your-allowlisted-host>/authorize",
"token_endpoint": "https://auth.<tunnel-id>.tunnel.anthropic.com/token",
"registration_endpoint": "https://auth.<tunnel-id>.tunnel.anthropic.com/register",
"code_challenge_methods_supported": ["S256"]
}

Только authorization_endpoint указывает на ваш существующий хост. Всё остальное использует URL туннеля.

Шаг 3: Укажите вашему MCP-серверу издателя туннеля

/.well-known/oauth-protected-resource вашего MCP-сервера:

JSON

{
"resource": "https://mcp.<tunnel-id>.tunnel.anthropic.com",
"authorization_servers": [
"https://auth.<tunnel-id>.tunnel.anthropic.com"
]
}


Демонтаж

Как вывести туннель из эксплуатации, когда он больше не нужен.

1. Получите ID туннеля

Helm

TUNNEL_ID=$(kubectl get secret mcp-tunnel -n mcp-tunnel \
-o jsonpath='{.data.tunnel-id}' | base64 -d)

Compose

TUNNEL_ID=$(sudo cat tunnel-data/tunnel-id)

2. Остановите развёртывание

Helm: helm uninstall mcp-tunnel -n mcp-tunnel (примечание: Secret с учётными данными был создан заданием настройки, а не Helm, поэтому он сохраняется после удаления)
​Compose: docker compose down

3. Архивируйте туннель

Сначала создайте новый токен API и отзовите его по завершении.

Shell

read -rs API_TOKEN && export API_TOKEN

curl -X POST "https://api.anthropic.com/v1/tunnels/${TUNNEL_ID}/archive" \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24"

4. Удалите сохранённые учётные данные

Helm: kubectl delete secret mcp-tunnel -n mcp-tunnel
​Compose: sudo rm -rf tunnel-data

Получение помощи

Обратитесь в вашу команду аккаунта Anthropic для получения помощи.


Приложение: конфигурация шлюза

Шлюз читает свою конфигурацию из файла YAML. В Docker Compose вы пишете этот файл непосредственно как config/mcp-gateway.yaml. В Helm установите эти поля под gateway.config.* в вашем файле значений — диаграмма управляет listen_addr, tls и tunnel_domain для вас.

Поле

Описание

По умолчанию

listen_addr

Адрес и порт для прослушивания

Обязательно

log_level

Уровень детализации логирования: debug, info, warn, error

info

shutdown_timeout

Время ожидания обработки активных запросов при корректном завершении

30s

tunnel_domain

Базовый домен для разрешения маршрутов с префиксом

Нет

tls.cert_file

Путь к сертификату TLS

Обязательно

tls.key_file

Путь к приватному ключу TLS

Обязательно

routes

Сопоставление имени хоста (или префикса) с URL вышестоящего сервера

Обязательно

upstream.allowed_ips

Диапазоны CIDR, к которым может подключаться шлюз

Приватные диапазоны RFC 1918

upstream.disable_ip_validation

Полностью отключить проверку IP

false

upstream.tls.ca_file

Пакет CA для проверки TLS вышестоящего сервера

Нет

upstream.tls.include_system_cas

Доверять системному пакету CA для TLS вышестоящего сервера

false

Для маршрутов https:// установите хотя бы один из параметров upstream.tls.ca_file или upstream.tls.include_system_cas.


Приложение: API туннелей

Для пользовательских рабочих процессов подготовки вы можете вызывать API туннелей напрямую. Все запросы требуют эти заголовки:

Shell

-H "Authorization: Bearer $API_TOKEN"
-H "anthropic-version: 2023-06-01"
-H "anthropic-beta: mcp-tunnels-2026-02-24"

Создать туннель:

curl -X POST https://api.anthropic.com/v1/tunnels \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24" \
-H "Content-Type: application/json" \
-d '{}'

Список туннелей:

curl https://api.anthropic.com/v1/tunnels \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24"

Зарегистрировать сертификат CA:

curl -X POST "https://api.anthropic.com/v1/tunnels/${TUNNEL_ID}/certificates" \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24" \
-H "Content-Type: application/json" \
-d "{\"ca_certificate_pem\": $(jq -Rs . < ca.crt)}"

Смотрите Приложение: Требования к сертификатам, чтобы узнать, что должны содержать сертификаты CA и сервера.

Список сертификатов CA:

curl "https://api.anthropic.com/v1/tunnels/${TUNNEL_ID}/certificates" \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24"

Отозвать сертификат CA:

curl -X POST "https://api.anthropic.com/v1/tunnels/${TUNNEL_ID}/certificates/${CERT_ID}/revoke" \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24"

Раскрыть токен туннеля:

curl -X POST "https://api.anthropic.com/v1/tunnels/${TUNNEL_ID}/reveal_token" \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24"

Ротировать токен туннеля:

curl -X POST "https://api.anthropic.com/v1/tunnels/${TUNNEL_ID}/rotate_token" \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24"

Архивировать туннель:

curl -X POST "https://api.anthropic.com/v1/tunnels/${TUNNEL_ID}/archive" \
-H "Authorization: Bearer $API_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-tunnels-2026-02-24"


Приложение: Требования к сертификатам

Если вы используете двоичный файл установки (setup init / setup renew-cert), он автоматически генерирует соответствующие сертификаты, и вы можете пропустить этот раздел. Эти требования применяются, если вы выдаете сертификаты через собственную PKI.

Сертификат CA — загружается через POST /v1/tunnels/{id}/certificates. Туннель может содержать максимум два активных сертификата CA одновременно, что позволяет выполнять ротацию без простоев.

  • Кодировка PEM, один сертификат, максимум 8 КБ

  • Расширение BasicConstraints с CA:TRUE, отмечено как критическое

  • Расширение SubjectKeyIdentifier присутствует

  • KeyUsage включает keyCertSign

  • В пределах периода действия

  • RSA 2048-бит или больше, или ECDSA P-256 или больше; подпись SHA-256 или более стойкая

Сертификат сервера — представлен шлюзом во время внутреннего TLS-рукопожатия. Не загружается в Anthropic.

  • Подписано непосредственно ЦС, зарегистрированным в туннеле

  • Расширение AuthorityKeyIdentifier присутствует, соответствует SubjectKeyIdentifier ЦС

  • SAN включает DNS-имя, соответствующее <route>.<tunnel-domain> (подстановочный знак *.<tunnel-domain> охватывает все маршруты)

  • Если расширение ExtendedKeyUsage присутствует, оно включает serverAuth

  • В пределах периода действия

  • RSA 2048-бит или больше, или ECDSA P-256 или больше; подпись SHA-256 или более стойкая

Справка: двоичный файл установки создает ЦС ECDSA P-256 (действительность 5 лет) и сертификат сервера RSA 4096-бит с подстановочным SAN (действительность 90 дней).


Приложение: справочник по CLI установки

Двоичный файл setup запускается внутри контейнера шлюза через docker compose run --rm setup <subcommand> (Compose) или как Helm-хук и CronJob (Kubernetes).

setup init — создает туннель через API туннелей, генерирует ЦС и сертификат сервера, регистрирует ЦС и записывает все выходные данные.

Флаг

Описание

По умолчанию

--api-url

Базовый URL API Anthropic. Также читается из API_URL.

обязательно

--api-token

Токен API с областью туннеля. Также читается из API_TOKEN.

обязательно

--output

Место назначения вывода: dir:/path или k8s-secret:NAME

k8s-secret:mcp-gateway

--cert-duration

Период действия сертификата сервера

2160h (90 дней)

--token-version

Строка обнаружения изменений; новое значение запускает ротацию токена туннеля

нет

setup renew-cert — выдает новый сертификат сервера, подписанный сохраненным ЦС. Вызов API не требуется.

Флаг

Описание

По умолчанию

--output

Место назначения вывода: dir:/path или k8s-secret:NAME

k8s-secret:mcp-gateway

--cert-duration

Период действия нового сертификата

2160h (90 дней)

--renew-before

Пропустить, если существующий сертификат действует дольше этого времени до истечения

0 (всегда обновлять)

Установка --renew-before=720h делает команду неоперативной, когда остается более 30 дней, подходит для запуска по расписанию.

Нашли ответ на свой вопрос?