RAD Security

官方

与RAD Security平台交互,该平台为Kubernetes和云环境提供AI驱动的安全洞察。

你可以用 RAD Security MCP 做什么?

  • 审查安全发现 — 列出并分析安全发现,然后更新某项发现的状态。
  • 检查镜像和 CVE — 获取 SBOM、列出存在漏洞的镜像、查找漏洞最多的镜像,以及忽略或取消忽略 CVE。
  • 追踪运行时行为 — 获取运行中容器的进程树和运行时基线,并分析其进程行为。
  • 审计 Pod 访问 — 列出曾通过 shell 进入 Pod 的人员。
  • 运行 RadQL 查询 — 列出数据类型、获取架构,并执行筛选或聚合查询,包括并行执行多个查询。
  • 管理自动化 — 列出自动化、运行记录和计划;获取运行详情;运行自动化;或创建和更新自动化。

文档

RAD Security MCP Server

npm version

一个用于 RAD Security 的 Model Context Protocol (MCP) 服务器,为 Kubernetes 和云环境提供 AI 驱动的安全洞察。

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> 是 RAD Security API 访问密钥(在 RAD Security 控制台中创建);<account_id> 是你的账户 ID。服务器会针对 RAD Security API 对每个请求进行身份验证 — 服务器端不会存储凭据。

短期有效的 Bearer ory_st_<session_token>:<account_id> 形式也可用,但会话令牌会过期 — 对于任何长期用途(例如 Slack / Claude Tag),建议使用访问密钥。

一个连接覆盖整个租户

若要通过一个 MCP 配置访问所有账户,请在租户上创建访问密钥,并使用 tenant=<tenant_id> 代替账户 ID:

Authorization: Bearer <access_key_id>:<secret_key>:tenant=<tenant_id>

在租户范围的会话中:

  • list_accounts 工具会返回该租户的账户。
  • 账户范围的工具需要一个 account_id 参数,该参数必须是租户的子账户。每次调用仅针对一个账户;结果不会跨账户合并。
  • 默认情况下仅提供只读工具,因为租户凭据可以访问每个账户。若要启用写入工具,请发送 X-Rad-Readonly: false。

对于 npx/stdio 服务器,设置 RAD_SECURITY_TENANT_ID,但不要设置 RAD_SECURITY_ACCOUNT_ID;使用 RAD_SECURITY_READONLY=false 启用写入工具。

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(驼峰命名):

{
  "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 客户端都支持通过 URL 和 Authorization 标头连接远程 Streamable HTTP 服务器 — 只有字段名称不同。无论哪种情况,都要在 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 凭据:

  • Claude Tag (Slack): 将服务器作为插件添加,其 .mcp.json 指向该端点,并在 Access bundle 的 Credentials 选项卡中添加 bearer 凭据。请参阅 Claude Tag — 连接自定义 MCP 服务器。
  • Claude.ai / Desktop: 在 Settings → Connectors 下添加;请参阅自定义连接器。

测试(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 移除所有写入工具。

  • 账户清单

    • 列出集群及其详细信息
  • 容器清单

    • 列出容器及其详细信息
  • 安全发现

    • 列出并分析安全发现
    • 更新安全发现的状态
  • 运行时安全

    • 获取运行中容器的进程树
    • 获取运行中容器的运行时基线
    • 分析运行中容器的进程行为
  • 审计

    • 列出曾进入 Pod shell 的用户
  • 镜像和漏洞

    • 获取 SBOM
    • 列出镜像及其漏洞
    • 获取漏洞最多的镜像
    • 忽略 / 取消忽略 CVE,并列出有效的 CVE 处置
  • Kubernetes 对象

    • 获取特定 Kubernetes 资源的详细信息
    • 列出 Kubernetes 资源
  • 收件箱

    • 列出收件箱项目及其详细信息
    • 将收件箱项目标记为误报
  • 自动化(workflows)

    • 列出自动化、运行记录和计划
    • 获取自动化和运行记录的详细信息
    • 运行自动化
    • 创建和更新自动化,并添加 cron 计划

    “Automation”是用户看到的产品名称;“workflow”是底层 Windmill 对象,API 和工具名称使用此名称。 两者指的是同一事物。

  • 知识库

    • 搜索知识库
    • 列出集合和文档
    • 对文档运行结构化查询
  • 仪表板

    • 列出仪表板并获取其详细信息
    • 列出并获取仪表板和小组件模板
    • 创建仪表板,并就地更新现有仪表板(省略的字段保持不变,因此小幅编辑无需重新发送整个仪表板)
  • 集成

    • 列出外部集成
  • RadQL(高级查询)

    • 列出可查询的数据类型(containers、findings、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.
# Set this without RAD_SECURITY_ACCOUNT_ID for a session across all the tenant's accounts.
RAD_SECURITY_TENANT_ID="your_tenant_id"

# Optional: true exposes only read-only tools. Tenant-scoped sessions are read-only unless this is false.
RAD_SECURITY_READONLY="true"

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 — 详情请参阅 LICENSE 文件。