RAD Security

официальный

Взаимодействуйте с платформой RAD Security, которая предоставляет аналитику

Что можно делать с RAD Security MCP?

  • Список результатов безопасности — Попросите вашего ассистента составить список и проанализировать результаты безопасности в ваших средах Kubernetes и облачных средах.
  • Исследование поведения во время выполнения — Получайте деревья процессов, базовые показатели времени выполнения и анализ поведения процессов для запущенных контейнеров.
  • Запросы по образам и уязвимостям — Получайте SBOM, списки наиболее уязвимых образов и управляйте статусами CVE, такими как игнорирование или снятие игнорирования CVE.
  • Управление автоматизациями — Составляйте списки, создавайте, обновляйте и запускайте автоматизации (рабочие процессы) с расписаниями cron прямо из чата.
  • Поиск по базе знаний — Ищите коллекции и документы, а также выполняйте структурированные запросы к конкретным документам.
  • Выполнение RadQL-запросов — Запускайте расширенные запросы с фильтрацией, поиском и агрегацией по типам данных, таким как контейнеры и результаты.

Документация

RAD Security MCP-сервер

npm version

Сервер Model Context Protocol (MCP) для RAD Security, предоставляющий AI-аналитику безопасности для сред Kubernetes и облачных сред.

RAD Security MCP server

Подключение (хостинг — рекомендуется)

RAD Security запускает MCP-сервер за вас, поэтому большинству пользователей не нужно ничего устанавливать или размещать. Укажите вашему MCP-клиенту хостируемую конечную точку и аутентифицируйтесь с помощью учётных данных RAD Security.

  • Конечная точка: https://api.rad.security/mcp/ — обратите внимание на замыкающий слэш.

  • Транспорт: Streamable HTTP.

  • Аутентификация: отправьте ваши учётные данные в заголовке Authorization:

    Authorization: Bearer <access_key_id>:<secret_key>:<account_id>
    

    <access_key_id> и <secret_key> — это ключ доступа к API RAD Security (создайте его в консоли RAD Security); <account_id> — ваш идентификатор аккаунта. Сервер аутентифицирует каждый запрос через API RAD Security — никакие учётные данные не хранятся на стороне сервера.

Краткосрочная форма Bearer ory_st_<session_token>:<account_id> также работает, но сессионные токены истекают — для долгосрочного использования предпочтителен ключ доступа (например, Slack / Claude Tag).

Claude Code

claude mcp add --transport http rad-security https://api.rad.security/mcp/ \
  --header "Authorization: Bearer <access_key_id>:<secret_key>:<account_id>"

OpenAI Codex CLI

~/.codex/config.toml:

[mcp_servers.rad-security]
url = "https://api.rad.security/mcp/"
http_headers = { "Authorization" = "Bearer <access_key_id>:<secret_key>:<account_id>" }

Или через CLI, сохраняя секрет в переменной окружения (export RAD_MCP_TOKEN=<access_key_id>:<secret_key>:<account_id>):

codex mcp add rad-security --url https://api.rad.security/mcp/ --bearer-token-env-var RAD_MCP_TOKEN

Cursor

.cursor/mcp.json:

{
  "mcpServers": {
    "rad-security": {
      "type": "http",
      "url": "https://api.rad.security/mcp/",
      "headers": {
        "Authorization": "Bearer <access_key_id>:<secret_key>:<account_id>"
      }
    }
  }
}

VS Code (GitHub Copilot)

.vscode/mcp.json — обратите внимание, что ключ обёртки — servers, а не mcpServers:

{
  "servers": {
    "rad-security": {
      "type": "http",
      "url": "https://api.rad.security/mcp/",
      "headers": {
        "Authorization": "Bearer <access_key_id>:<secret_key>:<account_id>"
      }
    }
  }
}

Gemini CLI

~/.gemini/settings.json — обратите внимание, что поле URL — httpUrl (не url):

{
  "mcpServers": {
    "rad-security": {
      "httpUrl": "https://api.rad.security/mcp/",
      "headers": {
        "Authorization": "Bearer <access_key_id>:<secret_key>:<account_id>"
      }
    }
  }
}

Cline

cline_mcp_settings.json — обратите внимание, что type должно быть точно streamableHttp (camelCase):

{
  "mcpServers": {
    "rad-security": {
      "type": "streamableHttp",
      "url": "https://api.rad.security/mcp/",
      "headers": {
        "Authorization": "Bearer <access_key_id>:<secret_key>:<account_id>"
      }
    }
  }
}

Windsurf

~/.codeium/windsurf/mcp_config.json — обратите внимание, что поле URL — serverUrl:

{
  "mcpServers": {
    "rad-security": {
      "serverUrl": "https://api.rad.security/mcp/",
      "headers": {
        "Authorization": "Bearer <access_key_id>:<secret_key>:<account_id>"
      }
    }
  }
}

Другие клиенты

Большинство MCP-клиентов принимают удалённый Streamable HTTP-сервер с URL и заголовком Authorization — различаются только имена полей. В каждом случае сохраняйте замыкающий слэш в URL.

КлиентРасположение конфигурацииПоле URLМаркер транспортаПоле заголовка
Claude Codeclaude mcp addпозиционный аргумент--transport http--header
OpenAI Codex CLI~/.codex/config.tomlurlопределяется автоматическиhttp_headers / bearer_token_env_var
Cursor.cursor/mcp.jsonurltype: "http"headers
VS Code.vscode/mcp.json (servers)urltype: "http"headers
Gemini CLI~/.gemini/settings.jsonhttpUrlопределяется автоматическиheaders
Clinecline_mcp_settings.jsonurltype: "streamableHttp"headers
Windsurf~/.codeium/windsurf/mcp_config.jsonserverUrlопределяется автоматическиheaders

Claude.ai / Claude Desktop / Claude Tag (Slack)

Эти поверхности добавляют удалённые MCP-серверы как коннекторы, которые используют собственные настройки учётных данных, а не сырой заголовок запроса. Добавьте https://api.rad.security/mcp/ как пользовательский коннектор, затем укажите bearer-учётные данные через настройки коннектора:

Проверка (MCP Inspector или curl)

npx @modelcontextprotocol/inspector
# Transport:      Streamable HTTP
# URL:            https://api.rad.security/mcp/   (trailing slash)
# Custom headers: { "Authorization": "Bearer <access_key_id>:<secret_key>:<account_id>" }
curl -H "authorization: Bearer <access_key_id>:<secret_key>:<account_id>" \
  -H "content-type: application/json" \
  -H "accept: application/json, text/event-stream" \
  -X POST https://api.rad.security/mcp/ \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'

Ограничение набора инструментов, видимых агенту

По умолчанию подключение получает все наборы инструментов. Чтобы предоставить агенту меньший набор — меньше контекста/накладных расходов на токены и минимальные привилегии — добавьте заголовок ограничения к этому подключению вместе с Authorization. Подмножество применяется принудительно: инструмент вне области видимости скрыт из tools/list и отклоняется при вызове.

ЗаголовокЭффект
X-Rad-Toolkits: findings, imagesтолько эти наборы инструментов
X-Rad-Exclude-Toolkits: workflowsвсе наборы, кроме этих
X-Rad-Readonly: trueтолько инструменты чтения (исключает инструменты записи)

Наборы инструментов: containers, clusters, audit, images, kubeobject, runtime, findings, inbox, workflows, knowledge_base, radql, dashboards, integrations. Все включены по умолчанию — сузьте с помощью заголовков выше и используйте X-Rad-Readonly, когда нужно исключить все инструменты записи.

Пример — агент только для чтения findings/images (любой клиент, поддерживающий заголовки; показан Cursor):

{
  "mcpServers": {
    "rad-security-findings": {
      "type": "http",
      "url": "https://api.rad.security/mcp/",
      "headers": {
        "Authorization": "Bearer <access_key_id>:<secret_key>:<account_id>",
        "X-Rad-Toolkits": "findings, images",
        "X-Rad-Readonly": "true"
      }
    }
  }
}

В Claude Code передайте дополнительный --header:

claude mcp add --transport http rad-security https://api.rad.security/mcp/ \
  --header "Authorization: Bearer <access_key_id>:<secret_key>:<account_id>" \
  --header "X-Rad-Toolkits: findings, images"

Возможности

Все инструменты требуют аутентификации и аккаунта в RAD Security. Хостируемая конечная точка по умолчанию предоставляет все наборы инструментов ниже; ограничьте клиент с помощью X-Rad-Toolkits / X-Rad-Exclude-Toolkits или исключите все инструменты записи с помощью X-Rad-Readonly: true.

  • Инвентаризация аккаунтов

    • Список кластеров и их деталей
  • Инвентаризация контейнеров

    • Список контейнеров и их деталей
  • Находки безопасности

    • Список и анализ находок безопасности
    • Обновление статуса находки безопасности
  • Безопасность выполнения

    • Получение деревьев процессов запущенных контейнеров
    • Получение базовых линий выполнения запущенных контейнеров
    • Анализ поведения процессов запущенных контейнеров
  • Аудит

    • Список тех, кто заходил в оболочку пода
  • Образы и уязвимости

    • Получение SBOM
    • Список образов и их уязвимостей
    • Получение самых уязвимых образов
    • Игнорировать / снять игнорирование CVE и список активных решений по CVE
  • Объекты Kubernetes

    • Получение деталей конкретного ресурса Kubernetes
    • Список ресурсов Kubernetes
  • Входящие

    • Список элементов входящих и их деталей
    • Отметить элемент входящих как ложное срабатывание
  • Автоматизации (workflows)

    • Список автоматизаций, запусков и расписаний
    • Получение деталей автоматизации и запуска
    • Запуск автоматизации
    • Создание и обновление автоматизаций, добавление cron-расписаний

    «Автоматизация» — это название продукта, которое видят пользователи; «workflow» — это базовый объект Windmill, который используют API и имена инструментов. Это одно и то же.

  • База знаний

    • Поиск по базе знаний
    • Список коллекций и документов
    • Выполнение структурированных запросов к документу
  • Дашборды

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

    • Список внешних интеграций
  • RadQL (расширенные запросы)

    • Список доступных типов данных для запросов (контейнеры, находки, kubernetes_resources и т.д.)
    • Получение схемы/метаданных для конкретных типов данных
    • Список возможных значений для полей фильтрации
    • Выполнение RadQL-запросов с фильтрацией, поиском и агрегацией
    • Построение запросов программно из структурированных условий
    • Выполнение нескольких запросов параллельно

Самостоятельное размещение

Предпочитаете запускать сервер самостоятельно — например, в изолированной среде, из-за требований к размещению данных или если не хотите маршрутизировать через хостируемый шлюз? Он опубликован в npm и как образ контейнера.

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

  • Node.js 20.x или выше

Учётные данные

Укажите учётные данные RAD Security через переменные окружения:

RAD_SECURITY_ACCESS_KEY_ID="your_access_key"
RAD_SECURITY_SECRET_KEY="your_secret_key"
RAD_SECURITY_ACCOUNT_ID="your_account_id"

# Optional: fetched automatically from the account if not set
RAD_SECURITY_TENANT_ID="your_tenant_id"

npx (stdio) — например, Claude Desktop

{
  "mcpServers": {
    "rad-security": {
      "command": "npx",
      "args": ["-y", "@rad-security/mcp-server"],
      "env": {
        "RAD_SECURITY_ACCESS_KEY_ID": "<your-access-key-id>",
        "RAD_SECURITY_SECRET_KEY": "<your-secret-key>",
        "RAD_SECURITY_ACCOUNT_ID": "<your-account-id>"
      }
    }
  }
}

Docker (Streamable HTTP)

docker build -t rad-security/mcp-server .
docker run \
  -e TRANSPORT_TYPE=streamable \
  -e RAD_SECURITY_ACCESS_KEY_ID=your_access_key \
  -e RAD_SECURITY_SECRET_KEY=your_secret_key \
  -e RAD_SECURITY_ACCOUNT_ID=your_account_id \
  -p 3000:3000 \
  rad-security/mcp-server

Фильтрация наборов инструментов

Управляйте тем, какие наборы инструментов предоставляет саморазмещённый сервер:

  • INCLUDE_TOOLKITS: список наборов через запятую для включения (включены только эти).
  • EXCLUDE_TOOLKITS: список наборов через запятую для исключения (все остальные включены). Игнорируется, если задан INCLUDE_TOOLKITS.

Доступные наборы: containers, clusters, audit, images, kubeobject, runtime, findings, inbox, workflows, knowledge_base, radql, dashboards, integrations. Все включены по умолчанию.

# Only the workflows toolkit
INCLUDE_TOOLKITS="workflows"

# Everything except runtime
EXCLUDE_TOOLKITS="runtime"

Мультитенантность (аутентификация по запросу)

MCP_AUTH_MODE управляет тем, как развёртывание streamable HTTP аутентифицирует входящие запросы — именно это использует хостируемая конечная точка:

  • MCP_AUTH_MODE=env (по умолчанию) — каждая сессия использует учётные данные окружения RAD_SECURITY_*. Однотенантный режим и без аутентификации на уровне HTTP, поэтому он не должен быть доступен из ненадёжных сетей.
  • MCP_AUTH_MODE=header — каждый запрос должен содержать собственные учётные данные в заголовке Authorization (форма Bearer <access_key_id>:<secret_key>:<account_id> выше); отсутствующий или некорректный заголовок отклоняется с 401. Поддерживается только с TRANSPORT_TYPE=streamable. RAD_SECURITY_API_URL берётся из конфигурации сервера, а не от вызывающего.
docker run \
  -e TRANSPORT_TYPE=streamable \
  -e MCP_AUTH_MODE=header \
  -e RAD_SECURITY_API_URL=https://api.rad.security \
  -p 3000:3000 \
  rad-security/mcp-server

Транспорт SSE (TRANSPORT_TYPE=sse) устарел в пользу Streamable HTTP и использует только учётные данные окружения.

Разработка

# Install dependencies
npm install

# Run type checking
npm run type-check

# Run linter
npm run lint

# Build
npm run build

Лицензия

Лицензия MIT — см. файл LICENSE для подробностей