Skip to main content
Glama
josh-thurston

Vanta MCP Server

Vanta MCP 服务器

一个用于 Vanta 合规平台的 MCP 服务器。公开了 16 个工具,用于管理控制项、漏洞、供应商、测试、风险场景、策略、受监控计算机、文档和发现项。

传输方式

传输方式

端点

使用场景

Streamable HTTP

http://<host>:8010/mcp

Claude Desktop,大多数 MCP 客户端

SSE

http://<host>:8010/sse

旧版客户端 (n8n 等)

健康检查

http://<host>:8010/health

容器健康检查

快速入门 — Docker

1. 获取凭据

  1. 登录 Vanta 开发者控制台

  2. 前往 Settings → API Access

  3. 创建一个 OAuth 应用程序 — 复制 Client IDClient Secret

  4. 授予工具所需的范围(通常为 vanta.readvanta.write)。

2. 配置

cp .env.example .env
# Edit .env — set OAUTH_CLIENT_ID and OAUTH_CLIENT_SECRET at minimum

.env 示例:

OAUTH_CLIENT_ID=your_client_id
OAUTH_CLIENT_SECRET=your_client_secret
AUTH_TOKEN=          # optional — requires Bearer auth on /mcp and /sse
PORT=8010

3. 运行

docker compose up -d
# Server: http://localhost:8010
# Health: http://localhost:8010/health

4. 连接 Claude Desktop

添加到 claude_desktop_config.json

{
  "mcpServers": {
    "vanta": {
      "type": "http",
      "url": "http://localhost:8010/mcp"
    }
  }
}

如果设置了 AUTH_TOKEN

{
  "mcpServers": {
    "vanta": {
      "type": "http",
      "url": "http://localhost:8010/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_AUTH_TOKEN"
      }
    }
  }
}

快速入门 — 本地(无 Docker)

python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
export OAUTH_CLIENT_ID=your_client_id
export OAUTH_CLIENT_SECRET=your_client_secret
python -m src.server

环境变量

变量

默认值

描述

TRANSPORT_MODE

streamable-http

信息性 — /mcp/sse 始终处于活动状态

MCP_HOST

0.0.0.0

绑定地址

MCP_PORT

8010

HTTP 端口(也接受旧版 PORT

AUTH_TOKEN

(已禁用)

如果设置,客户端必须发送 Authorization: Bearer <AUTH_TOKEN>

LOG_LEVEL

INFO

DEBUG, INFO, WARNING, ERROR

TIMEOUT_SECONDS

60

HTTP 请求超时时间(秒)

API_BASE_URL

https://api.vanta.com

Vanta API 基础 URL

OAUTH_CLIENT_ID

默认租户:Vanta OAuth2 客户端 ID (vci_...)

OAUTH_CLIENT_SECRET

默认租户:Vanta OAuth2 客户端密钥 (vcs_...)

OAUTH_CLIENT_ID / OAUTH_CLIENT_SECRET 仅用于自动创建“默认”租户条目。对于多租户部署,请改用 config/tenants.json


多租户

对于多个 Vanta 组织,请填充 config/tenants.json(从 config/tenants.json.example 复制):

{
  "tenants": [
    {
      "id": "acme-corp",
      "vanta_base_url": "https://api.vanta.com",
      "vanta_client_id": "vci_CLIENT_ID_A",
      "vanta_client_secret": "vcs_CLIENT_SECRET_A"
    },
    {
      "id": "contoso",
      "vanta_base_url": "https://api.vanta.com",
      "vanta_api_token": "vat_PERSONAL_ACCESS_TOKEN_B"
    }
  ]
}

id 值是您的代理/客户端在 X-Tenant-ID 请求头中发送的内容:

X-Tenant-ID: acme-corp
Authorization: Bearer <AUTH_TOKEN>   ← only if AUTH_TOKEN is set in .env

凭据字段:

字段

必需

描述

id

必须与 X-Tenant-ID 请求头完全匹配(区分大小写)

vanta_base_url

可选

默认为 https://api.vanta.com

vanta_client_id

*

OAuth 客户端 ID (前缀: vci_)

vanta_client_secret

*

OAuth 客户端密钥 (前缀: vcs_)

vanta_api_token

*

个人访问令牌 — OAuth 的替代方案 (前缀: vat_)

*每个租户需要一种身份验证方法。生产环境建议使用 OAuth。

如果 tenants.json 中存在 "default",则没有 X-Tenant-ID 请求头的请求将自动使用这些凭据。有关完整架构和客户端使用示例,请参阅 ../MCP-Multi-Tenant-Guide.md

config/tenants.json 已被 gitignore 忽略,且永远不会被构建到 Docker 镜像中 — 它通过 ./config:/app/config:ro 卷在运行时挂载。


工具

控制项

工具

描述

list_controls

列出所有控制项(支持分页)

get_control

获取特定控制项的详细信息(按 ID)

list_control_tests

列出链接到特定控制项的所有测试

漏洞

工具

描述

list_vulnerabilities

列出漏洞(支持分页)

remediate_vulnerability

更新漏洞的修复状态和备注

list_vulnerability_findings

列出漏洞发现项(支持分页)

deactivate_vulnerability

停用特定漏洞(按 ID)

供应商

工具

描述

list_vendors

列出已批准的供应商(支持分页)

get_vendor

获取特定供应商的详细信息(按 ID)

list_discovered_vendors

列出自动发现的供应商(来自集成)

测试

工具

描述

list_tests

列出所有合规性测试(支持分页)

list_test_entities

列出与特定测试关联的实体

风险与策略

工具

描述

list_risk_scenarios

列出风险场景(支持分页)

list_policies

列出安全策略(支持分页)

资产与文档

工具

描述

list_monitored_computers

列出由 Vanta 代理监控的计算机

list_documents

列出文档(策略、程序、证据)


身份验证流程

Claude Desktop → POST /mcp
  → TenantAuthMiddleware (validates AUTH_TOKEN if set, reads X-Tenant-ID)
  → _require_client() → tenants.json lookup or env vars
  → OAuth2 token exchange (POST https://api.vanta.com/oauth/token)
  → Vanta API call with Bearer token
  → Response

令牌按租户实例进行缓存,并在 401 错误时自动刷新。


项目布局

Vanta-MCP/
├── src/
│   ├── server.py              # Starlette app; /mcp, /sse, /health endpoints
│   ├── middleware.py          # TenantAuthMiddleware (AUTH_TOKEN + X-Tenant-ID)
│   ├── context.py             # Request-scoped tenant ID storage
│   ├── tools.py               # All 16 MCP tool functions
│   └── vanta_client.py        # Vanta API client (OAuth2, all endpoints)
├── config/
│   ├── tenants.json           # Gitignored — your multi-tenant config
│   └── tenants.json.example   # Template — safe to commit
├── Dockerfile
├── docker-compose.yml
├── docker-compose.override.yml.example
├── requirements.txt
├── .env.example
└── README.md

故障排除

401 Unauthorized

  • 验证 OAUTH_CLIENT_IDOAUTH_CLIENT_SECRET 是否正确。

  • 确保 OAuth 应用程序在 Vanta 开发者控制台中具有所需的范围。

  • 如果使用 AUTH_TOKEN,请确认客户端发送了 Authorization: Bearer <token>

403 Forbidden

  • OAuth 应用程序范围不足。请在 Vanta 开发者控制台中更新它。

404 Not Found

  • 资源 ID 在您的 Vanta 组织中不存在。

工具未在 Claude Desktop 中显示

  • 修改 claude_desktop_config.json 后重启 Claude Desktop。

  • 确认服务器正在运行:curl http://localhost:8010/health

No Vanta credentials found

  • 确保 .env(或环境变量)中设置了 OAUTH_CLIENT_IDOAUTH_CLIENT_SECRET

  • 或者确认 config/tenants.json 已挂载并包含所请求租户的有效条目。

Docker 代码更改未生效

  • docker compose restart 不会重新构建镜像。请运行:

    docker compose build --no-cache && docker compose up -d

许可证

MIT

Related MCP Connectors