Skip to main content
Glama
SquarePiSigma5

cloudflare-dns-mcp-server

cloudflare-dns-mcp-server

Сервер Model Context Protocol (MCP), который позволяет любому MCP-совместимому LLM-клиенту (Claude Code, Claude Desktop, пользовательским коннекторам claude.ai, Cursor и другим) читать и редактировать DNS-записи в вашем аккаунте Cloudflare. Он работает как потоковый HTTP-сервер (stateless JSON-режим, текущий стандарт MCP для удалённых серверов) с режимом stdio для клиентов, которые запускают локальные дочерние процессы.

Инструменты

Инструмент

Что делает

cloudflare_verify_token

Подтверждает, что токен API действителен и активен

cloudflare_list_zones

Перечисляет домены, которыми может управлять токен

cloudflare_list_dns_records

Перечисляет/фильтрует записи в зоне (источник ID записей)

cloudflare_get_dns_record

Получает одну запись по ID

cloudflare_create_dns_record

Создаёт записи A/AAAA/CNAME/MX/TXT/SRV/CAA и т.д.

cloudflare_update_dns_record

Частичное обновление; возвращает состояние до/после, чтобы изменения можно было откатить

cloudflare_delete_dns_record

Удаление (требуется confirm=true); возвращает снимок для воссоздания

cloudflare_export_zone

Экспортирует зону в файл BIND — сделайте резервную копию перед массовыми изменениями

Related MCP server: cloudflare-dns-mcp-server

Установка

Требуется Node.js 20+.

1. Создайте ограниченный API-токен Cloudflare. В панели управления Cloudflare перейдите в My Profile → API Tokens → Create Token → используйте шаблон Edit zone DNS и в разделе Zone Resources ограничьте его конкретными зонами, которыми должна управлять модель. Не используйте Global API Key — ограниченный токен означает, что в худшем случае радиус поражения — это DNS только на этих зонах.

2. Установите и соберите:

npm install
npm run build

3. Настройте и запустите:

cp .env.example .env   # fill in tokens, then either export them or use a loader
export CLOUDFLARE_API_TOKEN="cf_..."
export MCP_AUTH_TOKEN="$(openssl rand -hex 24)"   # protects the MCP endpoint itself
npm start

Конечная точка MCP теперь доступна по адресу http://127.0.0.1:8787/mcp (проверка работоспособности — /healthz). Переменные окружения: HOST (по умолчанию 127.0.0.1), PORT (по умолчанию 8787), TRANSPORT (http по умолчанию или stdio), ALLOWED_ORIGINS (дополнительные браузерные источники, через запятую).

4. Быстрая проверка:

MCP_AUTH_TOKEN="<same token>" npm run smoke

Это подключается через реальный MCP-клиент, выводит список из 8 инструментов и вызывает cloudflare_verify_token. Также можно указать MCP Inspector URL: npx @modelcontextprotocol/inspector.

Подключение клиентов

Claude Code:

claude mcp add --transport http cloudflare-dns http://127.0.0.1:8787/mcp \
  --header "Authorization: Bearer $MCP_AUTH_TOKEN"

Cursor / другие клиенты с JSON-конфигурацией — любой клиент, поддерживающий потоковый HTTP с пользовательскими заголовками, работает так же:

{
  "mcpServers": {
    "cloudflare-dns": {
      "url": "http://127.0.0.1:8787/mcp",
      "headers": { "Authorization": "Bearer <MCP_AUTH_TOKEN>" }
    }
  }
}

Клиенты, которые запускают только локальные stdio-серверы:

{
  "mcpServers": {
    "cloudflare-dns": {
      "command": "node",
      "args": ["/path/to/cloudflare-dns-mcp-server/dist/index.js"],
      "env": { "CLOUDFLARE_API_TOKEN": "cf_...", "TRANSPORT": "stdio" }
    }
  }
}

Пользовательские коннекторы claude.ai / Claude mobile требуют публичный HTTPS-URL — они не могут обращаться к localhost. Самый быстрый путь — Cloudflare Tunnel с машины, на которой запущен сервер:

cloudflared tunnel --url http://127.0.0.1:8787

Важное предостережение: пользовательский интерфейс коннектора claude.ai аутентифицируется через OAuth или вообще никак — в нём нет поля для статического bearer-заголовка. Это оставляет два варианта для удалённого использования: разместить туннель за Cloudflare Access (сервисная аутентификация) и завершать аутентификацию там, либо запускать без MCP_AUTH_TOKEN и полагаться на секретность URL туннеля — что является заметно более слабой защитой для того, что может редактировать ваш DNS. При использовании Cloudflare Tunnel сервер по-прежнему привязывается к 127.0.0.1, поэтому согласие не требуется; но если вы открываете порт напрямую, а не через туннель, неаутентифицированная привязка не к localhost требует ALLOW_UNAUTHENTICATED=true. Проверьте текущие варианты аутентификации коннектора claude.ai перед выбором; это меняется со временем.

Замечания по безопасности

Сервер по умолчанию привязывается к 127.0.0.1 и отказывается запускаться без CLOUDFLARE_API_TOKEN. Если вы привязываетесь к любому другому адресу без установленного MCP_AUTH_TOKEN, он отказывается запускаться — любой, кто может достучаться до порта, сможет редактировать ваш DNS — если только вы не установите ALLOW_UNAUTHENTICATED=true, что допустимо только когда аутентификация завершается выше по потоку (например, Cloudflare Access). Запросы из браузерных источников отклоняются, если они не с localhost или не из ALLOWED_ORIGINS (защита от DNS-ребдинга). Токены читаются из окружения, никогда не логируются и не возвращаются ни одним инструментом.

Что касается безопасности модели: удаление требует явного аргумента confirm=true, обновления возвращают состояние до/после, чтобы любое изменение можно было откатить, а cloudflare_export_zone даёт резервную копию BIND в один вызов — стоит попросить модель выполнить его перед массовыми правками. DNS-изменения распространяются в реальный интернет; неверная запись может вывести сайт или почту из строя, поэтому проверяйте то, что предлагает модель, прежде чем допускать её к боевым зонам.

Разработка

npm run build    # compile TypeScript → dist/
npm start        # run HTTP server
npm run smoke    # end-to-end client test against the running server

Структура исходников: src/index.ts (транспорты, middleware аутентификации), src/cloudflare.ts (API-клиент, разрешение зон, форматирование), src/tools.ts (регистрация инструментов).

Лицензия

MIT

Related MCP Connectors

Related MCP Servers